所以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字节&#39; d
==21417== at 0x4C2B800: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
答案 0 :(得分:4)
不确定delete[] data[position+num];
的含义。您的代码看起来也有点可疑:data
是一个指向char的指针数组,即类似C的字符串数组,但在循环中,您通过{{分配给每个指针一个char
1}}。你确定这是你想要的吗?通常你会分配一堆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
。