Abh*_*hay 5 c++ memory-management standards-compliance new-operator
在对等代码审查会话期间,我看到了如下代码:
char *s = new char[3];
*s++ = 'a';
*s++ = 'b';
*s++='\0';
delete []s; // this may or may not crash on some or any day !!
Run Code Online (Sandbox Code Playgroud)
首先,我知道在标准C++中,指向一个过去的数组大小是可以的,但访问它会导致未定义的行为.所以我相信最后一行*s++='\0'很好.但是,如果我没记错的话,C++标准规定delete应该提供new返回的相同指针.
我相信这意味着返回的指针不得被篡改.我想这是因为new可能会在返回的地址之前保留一些内务信息delete.移动new'd指针可能会使其无法访问.
是未定义的行为还是实现定义或未指定?有谁能确认一下吗?最好是指向C++标准中的正确位置.
C++标准草案(Draft_SC22-N-4411.pdf)的免费草案版本的详细内容见5.3.5节.我是从Bjarne的主页上得到的.
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |