gpt4 book ai didi

c++ - delete[] 提供了修改后的 new-ed 指针。未定义的行为?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:36 26 4
gpt4 key购买 nike

我在同行代码审查 session 期间看到了如下代码:

char *s = new char[3];
*s++ = 'a';
*s++ = 'b';
*s++='\0';
delete []s; // this may or may not crash on some or any day !!

首先,我知道在标准 C++ 中,指向数组大小的后一位是可以的。尽管访问它会导致未定义的行为。所以我相信最后一行 *s++='\0' 没问题。但如果我没记错的话,C++ 标准要求 delete 应该提供与 new 返回的指针相同的指针。

我相信这意味着返回的指针不能被篡改。我猜这是因为 new 可能会在 delete 可能使用的返回地址之前保留一些内务管理信息。移动 new 的指针可能会使它无法访问。

它是未定义的行为还是实现定义的或未指定的?谁能证实这一点?最好指向 C++ 标准中的正确位置。

C++ 标准草案 (Draft_SC22-N-4411.pdf) 的免费草案版本在第 5.3.5 节中有详细信息。我是从 Bjarne 的主页上得到的。

最佳答案

来自 C++ 标准,第 5.3.5/2 节:

the value of the operand of delete shall be the pointer value which resulted from a previous array new-expression. If not, the behaviour is undefined

关于c++ - delete[] 提供了修改后的 new-ed 指针。未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/788482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com