c++ - 内存操作 malloc 和 free 究竟做了什么?

标签 c++ c visual-studio-2008 gcc

最近遇到一个内存释放问题。首先,打击是 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/

相关文章:

C++11 - 引用的初始化不是表达式(的一部分)吗?

c++ - 从另一个线程写入的数组中获取数据

c - 有没有办法检查我的代理是否在线?

c - 为什么 const void* 仍然在 C 中更新?

c++ - 如何在 Visual Studio 2008 C++ 中捕获被零除错误?

c# - 如何更改我的wsdl的地址位置

c++ - 无限循环 vs boost::asio::deadline_timer C++ 性能

C++ 生成器 [bcc32 错误] Unit1.cpp(18) : E2040 Declaration terminated incorrectly

c - C 中空指针的自由数组

c# - 子控件中的 `DesignMode` 设置不正确?