c语言 - 无法释放程序中的所有 malloc 和 realloc 调用



在我的程序中,我有一些malloc和realloc调用,但由于某种原因,当我对我调用的那些调用free时,它仍然指向它们有直接泄漏。

变量名称在前面被声明为char**名称,直到下面才被初始化。我在不同的参数下重新分配和分配名称,所以我不知道最后如何释放它。我会只遍历整个名称数组一次吗?还是我必须做多次?

names = malloc(size * sizeof(char *));   //MALLOC
names[0] = malloc(2 * sizeof(char));     //MALLOC
names[0] = "0";
names[1] = malloc(2 * sizeof(char));     //MALLOC
names[1] = "1";

int i;
for (i = 0; i < icount; i++) {
names[i + 2] = malloc(17 * sizeof(char));    //MALLOC
fscanf(file, "%*[: ]%16s", names[i + 2]);
}

names = realloc(names, size * sizeof(char *));   //REALLOC
for (i = 0; i < ocount; i++) {
names[i + icount + 2] = malloc(17 * sizeof(char));   //MALLOC
fscanf(file, "%*[: ]%16s", names[i + icount + 2]);
}

for (i = 0; i < numOutputs; i++) {
fscanf(file, "%*[: ]%16s", v);
int idx = indexOf(size, names, v);
if (idx == -1) {
size++;
tcount++;
names = realloc(names, size * sizeof(char *));    //REALLOC
names[size - 1] = malloc(17 * sizeof(char));      //MALLOC
strcpy(names[size - 1], v);
step.outputs[i] = size - 1;
}

if (!steps) {
steps = malloc(sizeof(struct directive));    //MALLOC
} else {
steps = realloc(steps, scount * sizeof(struct directive));     //REALLOC
}

此处存在内存泄漏:

names[0] = malloc(2 * sizeof(char));     //MALLOC
names[0] = "0";
names[1] = malloc(2 * sizeof(char));     //MALLOC
names[1] = "1";

分配空间并将指向该空间的指针分配给names[0],然后立即用指向字符串常量的指针覆盖指向已分配空间的指针。names[1]也有同样的问题。

使用strcpy将字符串复制到分配的内存中:

names[0] = malloc(2 * sizeof(char));     //MALLOC
strcpy(names[0], "0");
names[1] = malloc(2 * sizeof(char));     //MALLOC
strcpy(names[1], "1");

还要注意,字符串常量是隐式以null结尾的,因此不需要手动添加。

相关内容

  • 没有找到相关文章

最新更新