这可能是一个非常简单的问题,但请帮助我.
我想知道当我调用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个字符".
哪里有关于大小的信息存储?
这是依赖于实现的.
是否有每个新的标头包含有关新分配的字节数的信息?
这是依赖于实现的.
"这依赖于实现"我的意思是它没有在标准中定义.
这完全取决于编译器和运行时库.它唯一的精确定义是什么影响new和delete对你的程序,但没有规定究竟这些acieved.
在你的情况下,似乎分配了比请求更多的内存,它可能存储管理信息,如当前内存块的大小,有关可用空间的相邻区域的信息或信息,以帮助调试器尝试检测缓冲区溢出和类似的问题.
| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |