リンクリストをコーディングして、自分自身にCを教えようとしています。私はポインタとメモリ管理に不慣れで、少し混乱しています。私はこのコードを持っています:
/* Remove a node from the list and rejiggle the pointers */
void rm_node(struct node **listP, int index) {
struct node *prev;
struct node *n = *listP;
if (index == 0) {
*listP = *listP->next;
free(n);
return;
}
for (index; index > 0; index--) {
n = n->next;
if (index == 2) {
prev = n;
}
}
prev->next = n->next;
free(n);
}
リストから要素を削除します。最初のノードを削除したい場合でも、リストを参照する方法が必要です。そのため、listP
argはダブルポインターであるため、リストの最初の要素を指し、使用したノードを解放できます。頭になります。ただし、listP
次のノードへのポインタにアクセスするために逆参照しようとすると、コンパイラは私に指示しますerror: request for member ‘next’ in something not a structure or union
。私はここで何が間違っているのですか?私は絶望的に混乱するかもしれないと思います..?