请考虑以下代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
此代码不起作用.但是我不确定为什么.我的教授给出了一个对我来说没什么意义的解释.据说这个free
功能不起作用.
据我所知,你只能释放使用malloc创建的指针.在这里我们在将指针发送到空闲之前修改它,从而使我们的声明无效.
这是批评该代码的正确方法吗?
在这里我们在将指针发送到空闲之前修改它,从而使我们的声明无效.
这是批评该代码的正确方法吗?
是的,代码没有释放分配的原始指针,因为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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
68 次 |
最近记录: |