我不确定这是否还可以,但是通常,当我使用malloc为char*指针分配内存时,我会看到:
malloc之后的内存表示
但是我真正期望的是指针指向一些垃圾或" 00"。
分配的内存指向字符'c',内存已经包含一些有意义的字符串(不确定这些是数据部分?导入表吗?(。
请注意,这正是在应用程序的入口点之后,我敢肯定没有非交流和无效的指针。谁能告诉我这是一件好事还是坏事,因为我不确定CRT的内存分配的内部工作吗?
当您释放一个内存块时,它只是将其添加到可用于将来分配的内存池中(并且可能与相邻的块合并在一起(,因此并不奇怪以至于您可以恢复与以前释放的相同内存,尤其是当您不断询问相同的大小时。
现在,通常没有完成覆盖(除非您启用一些调试选项(,因为这只是浪费时间 1 ,所以您看到的是完全正常的。
- 操作系统当分配器退还它们时覆盖释放内存页面风险。C运行时分配器并非如此,鉴于同一过程中的代码已经可以读取所有过程内存。