Forum: PC-Programmierung C - prüfen ob Speicher leer


von max .. (vbc2011)


Lesenswert?

Hallo,

wie kann ich prüfen ob ein Speicherbereich auf den ein Pointer zeigt 
leer ist??
In meinem Programm habe ich folgenden Ausdruck:

meinestrukt->inhalt....

wenn nun "inhalt" schon freigegeben wurde - also der speicher an dieser 
Stelle leer ist - bekomme ich einene heap-fehler - wie kann ich das 
abfragen (da ja if(meinestrukt->inhalt ==NULL) oder etwas ähnliches 
nicht geht - da ja bei einer solchen Abfrage auch schon ein Zugriff auf 
den nicht vorhandenen Speicher erfolgt - was wieder zu einem Fehler 
führt)

das sollte doch eig. kein hexenwerk sein...

danke

von pffff (Gast)


Lesenswert?

Wenn ich die Frage richtig verstanden habe lautet die Antwort: Es gibt 
keine Möglichkeit.

Es obliegt allein dem Programmierer sicherzustellen dass nur auf zuvor 
reservierte Speicherbereiche zugegriffen wird!

Hack: Für dynamisch allokierten Speicher nach jedem free() dem Pointer 
NULL zuweisen, dann kann man if(...==NULL) nutzen. Eigentlich taugt das 
aber nur zum Debuggen, den im fertigen Programm sollten solche Abfragen 
eigentlich NICHT nötig sein.


Gehts darum einen konkreten Fehler zu finden?

von Peter II (Gast)


Lesenswert?

max .. schrieb:
> wenn nun "inhalt" schon freigegeben wurde - also der speicher an dieser
> Stelle leer ist - bekomme ich einene heap-fehler - wie kann ich das
> abfragen (da ja if(meinestrukt->inhalt ==NULL) oder etwas ähnliches
> nicht geht - da ja bei einer solchen Abfrage auch schon ein Zugriff auf
> den nicht vorhandenen Speicher erfolgt - was wieder zu einem Fehler
> führt)
>
> das sollte doch eig. kein hexenwerk sein..

doch ist es. Speicher kann nicht leer sein.

du kannst nur nach dem Freigeben den Zeiger auf NULL setzen. Dann kannst 
du es auch Prüfen, anders geht es nicht.

von Der E. (rogie)


Lesenswert?

meinestrukt->inhalt kannst du sehr wohl auf NULL prüfen, musst nur dafür 
sorgen, das das auch bei der Speicherfreigabe passiert, d.h. du musst 
nach der Speicherfreigabe meinestrukt->inhalt auf NULL setzen:
1
 free(meinestrukt->inhalt);
2
 meinestrukt->inhalt = NULL;

von Klaus T. (gauchi)


Lesenswert?

Ich glaube, er will meinestruct selbst freigeben, dann geht 
meinestruct->inhalt natürlich nicht mehr.
aber meinestruct == NULL lässt sich noch abfragen


edit:
 auf NULL setzen beim Freigeben muss man natürlich trotzdem noch

von vbc2011 (Gast)


Lesenswert?

ja - genauso möchte ich das machen - gleich mal ausprobieren...

von max .. (vbc2011)


Lesenswert?

leider geht das auch nicht so wie ich mir das vorstelle...
ich versuche einen anderen weg - dazu eröffne ich einen neuen Beitrag.

danke soweit.

von bitte löschen (Gast)


Lesenswert?

max .. schrieb:
> dazu eröffne ich einen neuen Beitrag.

Wieso das jetzt?

von Rolf Magnus (Gast)


Lesenswert?

max .. schrieb:
> leider geht das auch nicht so wie ich mir das vorstelle...

Dann hat hier vermutlich keiner verstanden, wie du es dir vorstellst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.