valgrind:错误(不匹配的 free()/delete/delete[] )

问题描述 投票:0回答:1

所以 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)
c++ arrays valgrind dynamic-memory-allocation delete-operator
1个回答
3
投票

不确定你所说的

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[]
代替。

© www.soinside.com 2019 - 2024. All rights reserved.