Vij*_*jay 2 c coredump memory-leaks
我正在运行一个小型的c程序:
#include<stdio.h>
int main()
{
char *p;
p = (char *)malloc(10);
free(p);
free(p);
free(p);
printf("\npointer is freed!!\n");
}
基本上我释放已经被释放的记忆.我认为应该导致核心转储!!是不是这样?
但它正在印刷
pointer is freed!!
我错了一些在哪里?
您的计划存在多个问题:
malloc()和free(),你应该#include <stdlib.h>在调用任何这些函数之前做.malloc():它返回一个void *,可以安全地分配给任何其他指针类型(函数指针除外).所以,你可以这样做:p = malloc(10);malloc()或分配的指针realloc(),使用指针值以任何方式都是坏的:特别是,你不能free()再次调用它.int main()写得更好int main(void).main()回报率int,您应该从它返回一个值.传统上,0意味着成功.当然,你的程序的主要(没有双关语)问题可以解决它多次,但上面提到的其他问题也很重要.一旦你free()成功地使用指针,调用free()它就是未定义的行为:程序可以做任何事情,包括(不幸的是),似乎没有做任何坏事.我说"不幸",因为它可能会给你一种安全感,free()指针可以不止一次.