在c ++中删除&new

Sat*_*bir 6 c++

这可能是一个非常简单的问题,但请帮助我.

我想知道当我调用new和delete时会发生什么,例如在下面的代码中

char * ptr=new char [10];

delete [] ptr;
Run Code Online (Sandbox Code Playgroud)

调用new返回我的内存地址.它是否在堆上分配了精确的10个字节,其中存储了有关大小的信息.当我在同一个指针上调用delete时,我在调试器中看到在10个字节之前和之后有很多字节被更改.

是否有每个新的标头包含有关new分配的字节数的信息.

非常感谢

Joh*_*ell 13

它分配精确的10个字节

这是依赖于实现的.保证是" 至少 10个字符".

哪里有关于大小的信息存储?

这是依赖于实现的.

是否有每个新的标头包含有关新分配的字节数的信息?

这是依赖于实现的.

"这依赖于实现"我的意思是它没有在标准中定义.


sth*_*sth 5

这完全取决于编译器和运行时库.它唯一的精确定义是什么影响newdelete对你的程序,但没有规定究竟这些acieved.

在你的情况下,似乎分配了比请求更多的内存,它可能存储管理信息,如当前内存块的大小,有关可用空间的相邻区域的信息或信息,以帮助调试器尝试检测缓冲区溢出和类似的问题.