gpt4 book ai didi

c++ - 在 C++ 中删除 char 的动态数组

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:23 25 4
gpt4 key购买 nike

我有这个类,属性为'word'

class Node {
char *word;

在 Node 构造器中,我做了这个赋值:

word = new char[strlen(someword)];

在Node类的析构函数中,我尝试删除word指向的内容:

delete []word;

我在执行程序后得到下一条消息:

"Heap block at 003E4F48 modified at 003E4F51 past requested size of 1"

我哪里做得不好?

最佳答案

您的程序中存在缓冲区溢出,但在您未发布的代码中的其他地方。问题是您没有分配足够的内存——您没有为字符串末尾的空终止符留出空间。您应该将分配更改为此:

word = new char[strlen(someword) + 1];  // +1 for null terminator
...
strcpy(word, someword);

您应该感谢您的 C 运行时发现了您的错误。在大多数情况下,一个字节的缓冲区溢出将导致无声的内存损坏,并且直到很晚才被检测到(如果有的话)。

您还应该考虑使用 std::string 类,它会自动为您管理内存,因此您不必处理像这样的微妙问题。

关于c++ - 在 C++ 中删除 char 的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2767399/

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