gpt4 book ai didi

c++ - malloc:对象 0x7fff5fbff350 的 *** 错误:未分配正在释放的指针

转载 作者:行者123 更新时间:2023-11-28 06:25:24 25 4
gpt4 key购买 nike

我已经看到很多关于这个错误的页面,但我无法理解我的代码做错了什么,所以我希望如果我发布它,有人可以阐明一些问题。

这是一个 C++ 类项目。目标是编写一个函数,它接受两个 C 字符串 (char*) 并将它们连接在一起返回一个新的。我在这里编译,除了当我尝试删除 copycat 时,我在这个问题的标题中得到了 malloc 错误。

如何删除山寨版?

我想我也应该删除我在 cat2 函数 (p, q) 中创建的“未使用”新闻,但这给了我同样的错误。我在释放内存时错过了什么?

char* cat2(char* dest1, char* str2)
{
char* p = new char[100];
char* q = new char[100];
char* rvalue = new char[100];

for (p = dest1; *p != 0; p++)
{
;
}


for (q = str2; *q != 0; p++, q++ )
{
*p = *q;
}

*p = 0; /* set the last character to 0 */

rvalue = dest1;

return rvalue;
}

void main()
{
char s1[] = "Hello";
char s2[] = ", World!";

char* copycat = cat2(s1, s2);
cout << copycat;

delete copycat;
}

最佳答案

rvalue = dest1; 使 rvalue 指向 dest1 指向的内容。这是 main 中的本地缓冲区 s1

所以调用 delete copycat; 与尝试 delete s1; 是一样的,后者失败了,因为它不是通过 new 分配的。 (因为它应该是 delete[])。

你在 p = dest1;q = str2; 中犯了同样的错误。这些使 pq 指向那些缓冲区。您泄漏了通过 new 分配的所有内存,并通过在 s1 末尾写入字符导致缓冲区溢出。

我猜您打算将字符复制到您通过 new 分配的缓冲区中。但是,pq 缓冲区无论如何都没有用;您应该将字符复制到 rvalue 指向的缓冲区中。为此,您必须使用 *rvalue 等等(这意味着:rvalue 指向的位置,而不是制作 rvalue 指向完全不同且内存泄漏的地方)。

关于c++ - malloc:对象 0x7fff5fbff350 的 *** 错误:未分配正在释放的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28620586/

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