最近遇到一个内存释放问题。首先,打击是 C 代码:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int *p =(int*) malloc(5*sizeof (int));
int i ;
for(i =0;i<5; i++)
p[i ]=i;
p[i ]=i;
for(i =0;i<6; i++)
printf("[%p]:%d\n" ,p+ i,p [i]);
free(p );
printf("The memory has been released.\n" );
}
显然,存在内存超出范围的问题。当我使用 VS2008 编译器时,它给出了以下输出和一些关于内存释放的错误:
[00453E80]:0
[00453E84]:1
[00453E88]:2
[00453E8C]:3
[00453E90]:4
[00453E94]:5
但是当我使用 cygwin 的 gcc 4.7.3 编译器时,我得到以下输出:
[0x80028258]:0
[0x8002825c]:1
[0x80028260]:2
[0x80028264]:3
[0x80028268]:4
[0x8002826c]:51
The memory has been released.
显然,代码运行正常,但是5没有写入内存。 因此,VS2008 和 gcc 在处理这些问题上可能存在一些差异。 你们能给我一些专业的解释吗?提前致谢。
最佳答案
这是正常的,因为您从未将任何数据分配到 p[5] 的内存空间中。该程序将只打印存储在该空间中的所有数据。
关于c++ - 内存操作 malloc 和 free 究竟做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20135625/