如题
其实这个是一个细节问题,比如申请了一段内存,但是在中途返回了,这时如果忘记对之前申请的内存进行释放,后续其他地方访问到这里会造成内存泄漏。
例如
#include <fcntl.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
char * read_from_file(const char * filename, size_t length)
{
char *buffer;
int fd;
size_t bytes_read;
/* 分配缓冲区 */
buffer = malloc(length);
if (buffer == NULL) {
return NULL;
}
fd = open(filename, O_RDONLY);
if (fd == -1) {
return NULL;
}
bytes_read = read(fd, buffer, length);
if (bytes_read != length) {
close(fd);
return NULL;
}
}
问题出现在这里
以及这里
在这2处return之前,没有对之前malloc的buffer进行释放,后续会导致内存泄漏问题。
应该改为