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内存泄漏
的错误我想这已经是与边界情况在我的for循环,但我不”从逻辑上理解它是如何发生的。
编辑:有人指出,在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中得到错误。我错误地更新了吗?
MAXRECORDS = 10,并且slist-> servers_ptr []的大小是MAXRECORDS –
这不是内存泄漏,Valgrind消息告诉您正在覆盖或超出分配内存的边界(在您的情况数组中) –
Did你声明'servers_ptr'为'servers_ptr [MAXRECORDS + 1]'?否则,当'k = MAXRECORDS-1'时,您正在读取结尾。 –