我在类似问题的答案之一中已经看到了函数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;
}

最佳答案

Free使指针无效,但不更改值。如果那是您想要的,则应将其清零。释放它之后,它指向的对象是不确定的,但是可能会包含最后的东西,直到被重用。

free(*ptr);
*ptr = NULL;

关于c - 使用free()不能释放内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31436825/

10-16 02:15