int main() {
int *p;
p = (int*)malloc(sizeof(int));
p++;
printf("%d",*p);
p--;free(p);
return 0;
}
你能解释为什么这个程序在执行free(t)
时会产生错误吗?
我注意到程序在printf("%d",*t);
缺失时没有出错。
答案 0 :(得分:0)
首先声明t
;
并且不要free(t);
它是一个整数变量。 free(p);
因为它是分配内存的指针。
或者 -
您可能只是在程序中写了t
而不是p
,因为您没有声明t
。
但是,如果您还使用t
p
进行评论
printf("%d",*p);
会给出未定义的行为,因为在你的程序中你没有initialized p
。
首先初始化p。
答案 1 :(得分:0)
取消引用指向未分配的内存块的指针意味着未定义的行为。 然而
printf("%d",*t);
可能有效,甚至可以这样做
t--;free(t);
可能有效,但会导致另一堆可能的问题,不允许删除。