valgrind:内存泄漏(mistmatched free()/ delete / delete [])

时间:2015-10-01 23:41:18

标签: 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的块内的0字节&#39; d

==21417==    at 0x4C2B800: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)

1 个答案:

答案 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