gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 22:56:07 49 4
gpt4 key购买 nike

所以 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/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com