关于c语言的malloc和free
int main(void){
char *a = (char *)malloc(100*sizeof(char));
strcpy(a, "test");
printf("%s\n", a); //test
free(a);
printf("%s\n", a); //test
return 0;
}
这里 free 之后数据没变
int main(void)
{
int *i = (int *)malloc(sizeof(int));
*i = 5;
printf("%d\n", *i); //5
free(i);
printf("%d\n", *i); //0
return 0;
}
这里 free 之后变成了 0
这是为什么?? 这里涉及到编译器的相关版本以及free的实现了
这个不用太关心,你只需要知道free之后确实释放了即可 After you free the memory, it is not legal for you to access it. For java programming, it will throw an error. But for c programming, it assumes the programmer knows such boundaries. Seawolf 发表于 2020-9-5 04:23
After you free the memory, it is not legal for you to access it. For java programming, it will throw ...
ni zhe shi zai kao wo men ying wen ma? 风过无痕1989 发表于 2020-9-5 09:15
ni zhe shi zai kao wo men ying wen ma?
not really
我是vs2017,我断点查看了内存情况,如图所示,我free(a)后,该段申请的内存会直接被dd dd的填充,无论是test还是5,一样的效果
我个人的观点,这个是编译器的处理方式而已
你用的是什么软件运行这串代码的,你换个软件再试试 4goodworld 发表于 2020-9-5 22:02
我是vs2017,我断点查看了内存情况,如图所示,我free(a)后,该段申请的内存会直接被dd dd的填充,无论是 ...
哥们,汇编语言我们都不懂,你好像有点对牛弹琴 风过无痕1989 发表于 2020-9-5 23:17
哥们,汇编语言我们都不懂,你好像有点对牛弹琴
我只是通过底层的代码来反映我们看到现实情况,有时候一些规则不理解的,看看汇编,可能会更容易帮助我们理解
页:
[1]