gpt4 book ai didi

c++ - 删除动态二维数组不起作用

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

我对二维动态数组有疑问。代码在这里:

//Inicialization
char** arr = new char* [size];
for(int i = 0; i < size; i++)
arr[i] = new char[70];

它基本上是句子的数量,每个句子最多 70 个字符。好的...我以前就是那样用的。然后我想去定位它 - 我也这样做了!

//Deleting
for(int i = 0; i < size; i++)
delete [] arr[i];
delete [] arr;

这将在 i = 0 时崩溃:“表达式:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)”。

但正如我所说 - 我以这种方式在不同的项目中使用它:

//Init
char** vety = new char* [pocVet];
for(int i = 0; i < pocVet; i++)
vety[i] = new char[100];
//Something (again a few sentences).
//Deleting
for(int i = 0; i < pocVet; i++)
delete [] vety[i];
delete [] vety;

我在这里到处都看了,都是一样的。怎么了?PS:在它起作用的第二个例子中,不要介意不同的名字(用我的母语)。

编辑:可能是因为数组的内容?但在第二种情况下(它起作用的地方)也是其中的句子。我只有一堆问题,用户只选择 Action - 所以基本上它只是句子:

arr[0] = " 1 - Use something\n";
arr[1] = " 2 - Use different thing\n";
arr[2] = " 3 - etc...\n";
arr[3] = " 4 - etc\n";
arr[4] = " 5 - etc\n";
arr[5] = " 6 - etc\n";
arr[6] = " 7 - etc\n";

我什么都不做...只有 printf();

最佳答案

您重新分配指针 arr[0] 以指向字符串文字。

arr[0] = " 1 - Use something\n";

所以你泄漏了你分配的内存,然后你尝试在你没有分配的内存上调用 delete[]

解决方案是不要自己弄乱原始指针,而是使用标准库为您完成困难的工作。

std::vector<std::string> v;
v.emplace_back(" 1 - Use something\n");
// Other sentences

关于c++ - 删除动态二维数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40509368/

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