Kann vorher reservierten Speicherblock nicht freen
-
Tag zusammen.
Folgende Situation:
Ich habe eine Member-Funktion, welche Speicher für einen übergebenen Pointer anlegt und mit Daten füllt.
Da dieser Speicherblock nun in der Funktion selbst nicht mehr gefreed wird, muss ich das - logischerweise - von Außerhalb tun. Doch das schlägt leider fehl.Hier mein Funktionskopf:
void CTargetList::GetTarget(unsigned long targetid, char *&host, char *&path)
host und path sollen also den Pointer zum Speicher bekommen.
... host = (char*)malloc(hostlen); path = (char*)malloc(pathlen+1); ...
Hier wird dann der Speicher (innerhalb der obigen Funktion) reserviert. In der main()-Funktion sieht's nun so aus:
char *host, *path; targetlist.GetTarget(0, host, path); printf("Host: %s Path: %s\n", host, path); free(host); free(path);
Nun frage ich mich, wieso ein Fehler beim free()-Call auftritt (ohne die Calls läuft's einwandfrei. Ich denke aber, dass dadurch Leaks entstehen). Fehlermeldung während der Lauzeit ist "DAMAGE: After normal block".
Gehe ich die Sache falsch an oder brauche ich aus irgendwelchen Gründen die Blöcke nicht wieder freigeben? Wäre ja eigenartig, aber man weiß ja nie.
MfG
Nox
-
Wieso benutzt du malloc/free mit C++?
Ich würde zuerst so machen:
void CTargetList::GetTarget(unsigned long targetid, char** host, char** path);
und dann so aufrufen:
char* host, *path; ... targetlist.GetTarget(0, &host, &path);
-
supertux schrieb:
Wieso benutzt du malloc/free mit C++?
also: eigendlich befinden wir uns doch im ANSI C Forum!
mfG (c)h
-
Erstmal schönen Dank für die Antwort, werde es nachher mal probieren.
Und ein Sorry, dass ich es im ANSI C-Forum gepostet hatte...Klassen gehören da ja eigentlich nicht so wirklich zu.
-
Wozu überhaupt ** ein * reicht hier doch vollkommen, oder überseh ich da was
-
** ist ein pointer auf deine übergebenen pointer. das ist ne andere möglichkeit neben referenzen.