删除动态 2D 数组不起作用
Deleting dynamic 2D array won't work
我有一个2D动态数组的问题。代码在这里:
//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:在第二个例子中,它工作不介意不同的名字(在我的母语中)。
编辑:也许是因为数组的内容?但在第二种情况下(它起作用的地方),里面的句子也一样。我只是在里面有一堆问题,用户只选择动作,所以基本上它只是句子:
arr[0] = " 1 - Use somethingn";
arr[1] = " 2 - Use different thingn";
arr[2] = " 3 - etc...n";
arr[3] = " 4 - etcn";
arr[4] = " 5 - etcn";
arr[5] = " 6 - etcn";
arr[6] = " 7 - etcn";
我什么都不做…只有printf ();
将指针arr[0]
重新赋值为指向字符串字面值。
arr[0] = " 1 - Use somethingn";
所以你泄漏了你分配的内存,然后你尝试在你没有分配的内存上调用delete[]
。
解决方案是不要自己弄乱原始指针,而是使用标准库来为您完成困难的工作。
std::vector<std::string> v;
v.emplace_back(" 1 - Use somethingn");
// Other sentences
sprintf
应该为您工作,只要字符串文字的大小小于70。
sprintf(arr[0], " 1 - Use somethingn");
相关文章:
- 为什么我的数组双精度函数不起作用?
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- 为什么使用数组元素查找最大数字的程序不起作用?
- C++ - 块不移动,我的数组不起作用
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- Malloc void return char 数组有时不起作用(Terry Davis 对 C++);
- C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- 为什么我的数组或函数不起作用?
- C++:矩阵高斯消除不起作用:使用单维数组来存储元素
- 我可以使用常量定义数组的长度,那么为什么 int d[b] 不起作用呢?
- C++ 对象数组字符串输入在控制台上不起作用
- 字符数组不起作用:C++
- 将数组作为引用传递到函数中不起作用
- cpp 数组 - 分配常量索引有效,而非常量索引不起作用
- 将字符数组设置为彼此相等的方法不起作用
- 从数组中删除元素不起作用的函数
- 尝试读取数据文件,存储在数组中并打印所有元素,但它不起作用
- 在循环中更改数组的变量不起作用