Studieren einer Anleitung zu verknüpften Listen in C. Ich habe diesen Code kompiliert und durch Valgrind ausgeführt. Es zeigt 4 Zuordnungen und 0 Freigaben, die ich verstehe. Ich muss wissen, wie man free()
richtig aufruft, um zuzuordnen.Freigabe (frei)
Code-Beispiel: llist2.c
// linked list: inserting at the n'th position
#include "stdio.h"
#include "stdlib.h"
typedef struct Node
{
int data;
struct Node* next;
} Node;
Node* head;
void Insert(int data, int n)
{
Node* temp1 = malloc(sizeof(Node));
temp1->data = data;
temp1->next = NULL;
if(n==1) { // list is empty, set next to head, initially NULL.
temp1->next = head;
head = temp1;
return;
}
Node* temp2 = head;
for(int i = 0; i < n-2; i+=1) {
temp2 = temp2->next;
}
temp1->next = temp2->next;
temp2->next = temp1;
}
void Print() {
Node* temp = head;
while(temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main (int argc, char *argv[])
{
head = NULL;
Insert(2,1);
Insert(3,2);
Insert(4,1);
Insert(5,2);
Print();
return 0;
}
_Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten, der in der Frage selbst reproduziert werden muss. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: So erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel._ –
Sie implementieren keine "Lösch" -Operation, daher gibt es keinen echten Speicherverlust (der gesamte angeforderte Speicher ist verfügbar). Während es ein wenig schmutzig ist, den Speicher einfach freigeben zu lassen, wenn der Prozess aufhört, ist das kein großes Problem. Das Problem wäre, wenn Sie beispielsweise einen Knoten löschen (auf den nicht mehr zugegriffen werden kann) und den Speicher nicht freigegeben haben. – SJuan76
Woher soll ich kostenlos anrufen? –