考虑以下代码:
#include < stdio.h > #include < stdlib.h > #define SIZE 10 int main() { int * p, i; p = malloc(SIZE * sizeof(int)); if (p == NULL) { printf("malloc failed.\n"); return 1; } for (i = 0; i < SIZE; i++) * (p + i) = i * i; for (i = 0; i < SIZE; i++) printf("%d\n", * p++); free(p); return 0; }
此代码无效。然而,我不知道为什么。我的教授给了我一个没有多大意义的解释。据推测 free 函数不起作用。
free
据我所知,您只能释放使用malloc创建的指针。在这里,我们在将指针发送到free之前修改它,从而使我们的语句无效。
这是批判代码的正确方式吗?
在这里,我们在将指针发送到free之前修改它,从而使我们的语句无效。 这是批判代码的正确方式吗?
在这里,我们在将指针发送到free之前修改它,从而使我们的语句无效。
是,代码未释放分配的原始指针,原因是 p++ 它在每次循环迭代中递增指针。
p++
而是以这种方式打印 p 未更改。
p
for (i = 0; i < SIZE; i++) { // printf("%d\n", * p++); printf("%d\n", p[i]); // or printf("%d\n", * (p + i)); } // With above change, `p` is the same as the original allocated value. free(p);