[英]Can't free all malloc and realloc calls in program
在我的程序中,我有一些 malloc 和 realloc 調用,但由於某種原因,當我對我調用的那些調用 free 時,它仍然指向它們存在直接泄漏。
變量名早先被聲明為 char **names 並且直到下面才被初始化。 我在不同的參數下重新分配和分配名稱,所以我不確定最后如何釋放它。 我會遍歷整個名稱數組一次嗎? 還是我必須多次這樣做?
names = malloc(size * sizeof(char *)); //MALLOC
names[0] = malloc(2 * sizeof(char)); //MALLOC
names[0] = "0\0";
names[1] = malloc(2 * sizeof(char)); //MALLOC
names[1] = "1\0";
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
}
您在這里有 memory 泄漏:
names[0] = malloc(2 * sizeof(char)); //MALLOC
names[0] = "0\0";
names[1] = malloc(2 * sizeof(char)); //MALLOC
names[1] = "1\0";
您分配空間並將指向該空間的指針分配給names[0]
,然后立即用指向字符串常量的指針覆蓋指向已分配空間的指針。 names[1]
有同樣的問題。
改用strcpy
將字符串復制到分配的 memory 中:
names[0] = malloc(2 * sizeof(char)); //MALLOC
strcpy(names[0], "0");
names[1] = malloc(2 * sizeof(char)); //MALLOC
strcpy(names[1], "1");
另請注意,字符串常量隱含 null 終止,因此無需手動添加。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.