c++ - valgrind:内存泄漏(不匹配的 free()/delete/delete[] )

标签 c++ arrays valgrind dynamic-memory-allocation delete-operator

所以 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 的 block 内的 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;

或者,更好的是,不要使用 newdelete完全使用标准容器,如 std::vector<std::string> .如果分配多个 char , 然后使用 delete[]相反。

关于c++ - valgrind:内存泄漏(不匹配的 free()/delete/delete[] ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898449/

相关文章:

c++ - 标量删除析构函数问题

arrays - 如何在 react 中的对象数组内设置对象数组的状态

c - 错误: "Access not within mapped region at address" (Valgrind)

java - 如何删除数组元素

c - realloc() C语言改变int数组中的值

linux - 查找双重释放错误的分配站点(使用 valgrind)

c++ - 错误 C2086 : redefinition

c++ - 如何在boost::grid_graph中使用给定的vertex_descriptor访问edge_descriptor

c++ - 如何阻止 VS2K10 缓存环境变量

javascript - 为什么 Array.map() 方法返回 arr[index+1].length 为未定义?