【发布时间】:2016-02-26 08:22:59
【问题描述】:
所以我只是想问一下,当添加注释行时,这是一种未定义的行为。尽管没有编译错误,并且它们都给出了相同的答案。我想知道有什么区别。地址是否被 a 的地址覆盖。此外,如果有人这样做(即为 b 分配内存),memcpy() 会是一个很好的解决方案。这可能是一个微不足道的例子,但我想了解其中的区别。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *a;
int *b;
a=malloc(sizeof(int));
//b=malloc(sizeof(int));
int c=6;
a=&c;
b=a;
printf("%d\n",*b);
return 0;
}
【问题讨论】:
-
你有内存泄漏。
-
请注意,
a=malloc(sizeof(int)); a=&c;也会造成内存泄漏。 -
无论有没有评论,你的程序都会表现得很糟糕。定义明确,但很糟糕。 :)
标签: c pointers malloc undefined-behavior