gpt4 book ai didi

c++ - 释放在返回指向该内存的指针的函数中分配的内存 (C++)

转载 作者:太空宇宙 更新时间:2023-11-04 15:19:50 24 4
gpt4 key购买 nike

当我尝试删除“z”时出现堆损坏错误。我假设 z 指向分配的内存,所以我很困惑为什么 delete[] 会产生错误。

char* cpytoheap(const char* y)
{
char* x = new char;
for (int i=0; *(y+i); i++)
{
*(x+i) = *(y+i);
*(x+i+1) = '\0';
}
return x;
}


int main()
{
char* z = "asdf";
z = cpytoheap(z);
cout << z; //check that "asdf" copied correctly
delete[] z; //error doesn't occur if this is taken out
char y; //keep window open
cin >> y; //...
return 0;
}

我没有在 cpytoheap 中使用下标,因为练习是在不使用下标的情况下复制到免费存储区。我通常会继续前进,但我觉得将来了解如何在这种情况下释放内存可能很重要。

最佳答案

您只为 x 分配了 1 个字符。改成

char *x = new char[strlen(y)+1];

确保为内容分配足够的内存空间。

关于c++ - 释放在返回指向该内存的指针的函数中分配的内存 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22084496/

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