ich eine Struktur für einen 2D-LinkedList habe ich mache:C - Malloc Absturz/verderbter Heap mit Pointers
struct Node
{
void *data;
struct Node *up, *left, *right, *down;
};
Da ich zu Java gewohnt bin, habe ich eine Funktion, die ein Konstruktor sein vorgibt die wie folgt aussieht:
struct Node* buildNode(void *data)
{
struct Node *node = malloc(sizeof(struct Node*)); // Program crashes here.
node->data = data;
node->up = NULL;
node->left = NULL;
node->right = NULL;
node->down = NULL;
return node;
}
Mein Programm stürzt ab, wenn es die malloc
Linie im zweiten Absatz erreicht. Wenn ich die *
von der malloc(sizeof(struct Node*))
entferne, stürzt es nicht ab und funktioniert richtig.
Warum ist das? Meine buildNode
Funktion gibt einfach einen Zeiger auf Node
zurück und gibt die Struktur Node
nicht selbst zurück. Der Fehler, den ich bekomme, hat etwas mit korrupten Heap zu tun und da ich etwas neu in C bin, verstehe ich nicht, was das alles bedeutet.
danke!
Nach viel lernen, ich habe viel über C gelernt und eine Sache, die mir gesagt wurde, ist Ihre letzte Aussage von "oder die Erinnerung wird nicht veröffentlicht werden, bis das Programm beendet wird." ist nicht unbedingt der Fall. Kannst du es ausarbeiten? Viele Orte, die ich sehe, sagen, dass der Platz, den Ihre Anwendung einnimmt, wenn das Programm beendet wird, freigegeben wird, egal ob Sie es vergessen haben oder nicht. – Hatefiend
Das ist richtig. Der Speicher wird nicht freigegeben * bis das Programm beendet wird *, wenn das Betriebssystem den gesamten Prozess aufräumt. Ich denke, du sagst genau dasselbe wie ich. – Baldrick
Oh, es tut mir leid, ich lese "Speicher wird nicht freigegeben bis" als "Speicher wird nicht freigegeben, wenn" – Hatefiend