for(k=i; k<MAXRECORDS; k++) {
if(slist->servers_ptr[k+1] != NULL) {
slist->servers_ptr[k] = slist->servers_ptr[k+1];
} else slist->servers_ptr[k] = NULL;
}
Когда я бегу Valgrind, я получаю сообщение об ошибке недействительных размера 8.Что вызывает утечку памяти в этом цикле?
Обратите внимание, что MAXRECORDS = 10
, и размер массива MAXRECORDS
.
Я предполагаю, что это имеет какое-то отношение к случаю границы в моем цикле for, но я не понимаю логически, как это происходит.
EDIT: Было указано, что в последнем раунде цикла for доступ к servers_ptr[k+1]
находится вне массива, вызывая ошибки valgrind. С тех пор я обновил свой код до:
for(k=i; k<MAXRECORDS-1; k++) {
if(slist->servers_ptr[k+1] != NULL) {
slist->servers_ptr[k] = slist->servers_ptr[k+1];
if(k==MAXRECORDS-2)slist->servers_ptr[k+1] = NULL;
} else slist->servers_ptr[k] = NULL;
}
Я до сих пор получаю ошибки в valgrind. Я обновил его неправильно?
Тогда мой ответ ниже. –
Вы здесь не делаете 'malloc' или' realloc'. Вы действительно думаете, что с этим кодом возникает проблема с утечкой памяти? Я думаю, что проблема может быть связана с другим фрагментом кода, в котором вы выделяете память. – c0da
Я не вижу ничего явно неправильного. Можете ли вы опубликовать точные ошибки, которые вы получаете от valgrind? –