我需要做一個函數,它會刪除c中鏈表的前n個節點並返回刪除的節點數。如果列表小於n,它應該變空。 另外,我不能使用遞歸。C - 鏈接列表:free()函數正在刪除我的頭節點;我如何正確使用free()?
現在的代碼,它的工作原理,但我沒有釋放「刪除」節點的內存。如果我取消應該釋放內存的一部分,我得到codeboard.io此錯誤:
Input: 5 + [ 61 62 63 64 65 66 ]
Output: expected 5 + [ 66 ]
obtained 5 + [19333664 ]
這個隨機數似乎是,它在內存中訪問「垃圾」。 如何正確釋放我不再使用的節點?裏面listas.h
代碼:
typedef struct lligada {
int valor;
struct lligada *prox;
} *LInt;
LInt newLInt (int, LInt);
int drop (int, LInt *);
內listas.c
#include <stdlib.h>
#include "listas.h"
int drop (int n, LInt *l){
int count = 0;
LInt *aux;
while(n>0 && (*l)!=NULL){
n--;
count++;
//aux = &((*l));
*l = (*l)->prox;
//free(*aux);
}
return count;
}
代碼
Codeboard鏈接鍛鍊:https://codeboard.io/projects/16259
我在寫回答時忽略了'l'是一個雙指針的事實。對不起。通常建議使用普通指針而不是多級指針。 – jboockmann
好的,明白了。我想我現在明白了! –
強烈建議:不要通過'typedef'隱藏'指針'。相反,使用typedef爲結構提供一個'short'名稱,然後在聲明該結構的實例時,將其作爲指針。 – user3629249