返回信息流☆─────────────────────────────────────☆
perfectfan (nicky) 于 (Thu Dec 4 09:43:33 2008) 提到:
今天看一程序
long *arr=new long[2];
arr[2]=20;
delete [] arr; //程序就会卡死在这里
后来发现这是作者的一个错误,在new出来的空间后面紧跟着赋值了
所以感觉new出来的数组后面是不是紧跟着一个标志符表示这块new的空间结束了,
让delete []的时候能正确释放?
☆─────────────────────────────────────☆
hokkien (伤!) 于 (Thu Dec 4 10:08:50 2008) 提到:
arr[2]=20; //数组越界溢出了,危险
把下面的字节单元给覆盖了,覆盖的可能是重要信息,所以程序就会卡死。跟你说的那个没什么关系
☆─────────────────────────────────────☆
guo (计忆邮心|郭) 于 (Thu Dec 4 10:13:20 2008) 提到:
“你在使用new的时候,编译器不只是分配了2个long,在这之前还有一个叫cookie的东西,它占有4字节,当然不同的编译器是不一样的,记录的东西也不一样,不过它都记录了new所分配的内存大小,当你用delete的时候,是先去读这个cookie的
楼主可以用指针回退4字节读这处cookie值,可惜用MS和GNU编译是看不懂的,BC能看到分配的内存大小”
好像是没有数组结束标识符的
不想delete出错的话就别越界访问数组了 呵呵
这是一条镜像帖。来源:北邮人论坛 / cpp / #26075同步于 2009/7/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[合集] new出来数组是不是这块空间之后还有标识符表示new出来的
shenlei
2009/7/10镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。