verkettete Liste

Gast #590812
Lesenswert?

Hi,

ich brauche eine verkettete Liste, bei der jeder Knoten eine bestimmte 
Menge Daten enthält. Da ich aber erst zur Laufzeit weiss, welche Anzahl 
an Daten ich benötige, habe ich mir folgendes überlegt:

typedef struct
{
unsigned char *data;
PNODE pNext;
PNODE pPrev;
} NODE, *PNODE;


void Node_Add(int len)
{
PNODE pNode;

pNode = HeapAlloc(hHeap, 0, sizeof(NODE));
pNode->data = (unsigned char*)malloc(len * sizeof(unsigned char));

// Hier Knoten in Liste einfügen
...
}


void Node_Remove(PNODE pNode)
{
...

free(pNode->data);
HeapFree(hHeap, 0, pNode);

...
}


Das Programm läuft. Ich frag mich nur, ob ich mir hier irgendwie ein 
Speicher-Leck programmiert habe?

Gruß Ralf
#590824
Lesenswert?

Ralf wrote:

> Das Programm läuft. Ich frag mich nur, ob ich mir hier irgendwie ein
> Speicher-Leck programmiert habe?

Das kann man mit diesen Fragmenten nicht sagen.
Speicherlecks enstehen bei linearen Listen meistens
in der Remove Funktion, die einen einzelnen Knoten
auskettet über den Umweg, dass das Freigeben gar
nicht aufgerufen wird.

Aber:
Warum verwendest du einmal HeapAlloc() und einmal malloc()?

Und lass den cast beim Returntyp von malloc weg.
In C ist er unnötig, ja sogar gefährlich, und in
C++ solltest du sowieso kein malloc benutzen
sondern new.
Gast #590872
Lesenswert?

Wie man sieht, ist mir das mit dem dynamischen Speicher nicht so ganz 
geheuer.

@Simon: Ja, ich nutze Visual-C++. Also bei HeapAlloc reserviere ich mir 
den Speicher für den Zeiger, welcher dann auf die Speicherstellen von 
malloc zeigt. Da war ich mir nicht ganz sicher, ob das so richtig ist. 
Aus deiner Frage schliese ich mal, daß das so stimmt.

@Karl Heinz: Warum HeapAlloc und malloc? Gute Frage. Ich werde das mal 
ändern auf new.

Vielen Dank für eure Antworten.

Gruß Ralf


#591089
Lesenswert?

Ralf wrote:
> @Karl Heinz: Warum HeapAlloc und malloc? Gute Frage. Ich werde das mal
> ändern auf new.

Hmm.
Aus dem Rest deiner Antworten schliesse ich mal, dass du
eigentlich in C++ programmierst. Da erhebt sich natürlich
die Frage: Ist das irgendeine Übungsaufgabe oder ist das
was für den industriellen Einsatz.

Im letzteren Fall: Du weist schon, dass dein C++ Compiler
eine STL mitbringt, in der eine fix fertige Listenklasse
enthalten ist?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren