最近看 Linux 内核,看到一个问题: malloc 申请的内存,指针为 prt, free 之后如果没有赋值 prt=NULL 会如何?

2015-04-05 02:28:16 +08:00
 wind3110991

例如:
在堆段中手动malloc申请一段内存:
char* ptr = (char*)malloc(10);
........
free(ptr);
//ptr = NULL;假设这步忘记做了

那么这个ptr指针是不是依然指向那一块内存?
也就是说我接下来下次依然可以使用ptr指针?
貌似free的内存块是要够一页大小才会置换页面的
请问这个ptr如果没有赋值NULL会有什么后果?

另外,那么问题又来了
如果我双重释放ptr又会如何?
free(ptr);
free(ptr);

1845 次点击
所在节点    C
21 条回复
wind3110991
2015-05-30 17:01:11 +08:00
嗯嗯,我也测试过,如果没有赋值ptr = NULL
之后还是会保留ptr指向的虚拟地址

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/181639

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX