Так Valgrind дает мне эту ошибку:Valgrind: утечки памяти (mistmatched бесплатно()/удалить/удалить [])
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 **).
Кроме того, ниже этой ошибки я получаю следующее:
Адрес 0x5a1c160 составляет 0 байт внутри блока размером 1 alloc'd
==21417== at 0x4C2B800: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
Это не был «массив данных», который был выделен - это был массив указателей. Данные [0] - указатель на символ, данные [1] - указатель на символ и т. Д. С удалением [] data [position + num] вы говорите: «Удалите массив того же типа, что и данные [position + num], он находится в данных [position + num]», поэтому вы говорите «удалите массив указателей на char ", но на самом деле вы храните один указатель на char. Afaik - это неопределенное поведение в std, но компиляторы все равно получат от него. К сожалению, я не знаю, почему вы получаете сообщение об ошибке с данными delete [position + num], это похоже на действительное заявление для меня. – piezol
Я никогда не использовал valgrind, если честно. Кроме того, это 2015 год, вы получите много ответов типа «никогда не используйте новый/удалить»;) – piezol