簡體   English   中英

無法釋放程序中的所有 malloc 和 realloc 調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM