使用free()无法释放内存

Gou*_*eru -3 c string malloc free

getFree()我在一个类似问题的答案之一中看到它的功能,但是字符串cpy仍然具有第一次给出的相同字符串它运行的次数,即T次.所以,有人请帮忙.

void getFree(char ** ptr) {
    if (*ptr != NULL) {
        free(*ptr);
    }
    return;
}

int main() {
    int T, j;
    scanf("%d", &T);
    for (j = 0; j < T; j++) {
        char * cpy,
        int count = 0, i = 0, x = 0, k = 0;
        cpy = (char*)malloc(500 * sizeof(char));
        if (getchar() == '\n') {
            do {
                *(cpy + i) = getchar();
                i++;
            } while(*(cpy + i - 1) != '\n');
        }
        getFree(&cpy); 
        printf("%s", cpy);           
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*obs 5

Free使指针无效,但不会更改值.如果那是你想要的,你应该把它归零.在释放它之后,它指向的是未定义的,但可能包含其中的最后一项,直到它被重用.

free(*ptr);
*ptr = NULL;
Run Code Online (Sandbox Code Playgroud)

  • 我对这段代码的第一反应是"wtf ???" 你的回答要好得多 - 谢谢! (3认同)