BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #26075同步于 2009/7/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[合集] new出来数组是不是这块空间之后还有标识符表示new出来的

shenlei
2009/7/10镜像同步0 回复
☆─────────────────────────────────────☆ 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出错的话就别越界访问数组了 呵呵
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。