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'時,您正在讀取結尾。 –