所以 valgrind 给了我这个错误:
Mismatched free() / delete / delete []
指的是下面这行代码:
delete[] data[position+num];
但是即使我将其更改为
,错误仍然出现delete data[position+num];
数据数组按以下方式分配:
data = new char*[width];
for (int i=0; i<width; ++i){
data[i] = new char;
}
我只想删除那一列(char **data)。
此外,在该错误下方我得到以下信息:
地址 0x5a1c160 是大小为 1 分配的块内的 0 字节
==21417== at 0x4C2B800: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
不确定你所说的
delete[] data[position+num];
是什么意思。您的代码看起来也有点可疑:data
是一个指向字符的指针数组,即类似于C的字符串数组,但在循环中,您通过char
为每个指针分配了一个data[i] = new char;
。你确定这就是你想要的吗?通常你会分配一堆,data[i] = new char[some_length];
。
无论如何,您都需要按相反的分配顺序
delete
:
for (int i=0; i<width; ++i){
delete data[i]; // or delete[] data[i] if pointing to more than one char
}
delete[] data;
或者,更好的是,根本不要使用
new
和 delete
,而使用 std::vector<std::string>
等标准容器。如果您分配多个 char
,则使用 delete[]
代替。