Florian Strienz
Erfahrenes Mitglied
Hallo zusammen,
ich komme eigentlich aus der Java Ecke, muss aber aktuell C Code von 19XX auf XML umprogrammieren. Funktioniert auch ganz gut alles. Ich habe nur ein kleines Problem.
Ich benötige ein Array in dem ich beliebig viele Strings abspeichern kann. Meine Idee war, ein Pointer Array auf char Pointer.
static char** cnptr=NULL;
Wenn ich weiss, wieviele Spalten ich brauche, reserviere ich den Speicher
cnptr = (char **) calloc(doc_anz_spalten, sizeof(**cnptr));
Und weise die Werte aus dem XML in einer for Schleife zu
Das funktioniert auch perfekt. Aber leider kriege ich beim Speicher freigeben eine Speicherschutz verletztung im Heap.
Kann mir jemand hier weiterhelfen? Was mache ich falsch. Wo ist der Denkfehler. Bin ja schon überrascht, dass der erste Teil funktioniert.
Gruß
Flo
ich komme eigentlich aus der Java Ecke, muss aber aktuell C Code von 19XX auf XML umprogrammieren. Funktioniert auch ganz gut alles. Ich habe nur ein kleines Problem.
Ich benötige ein Array in dem ich beliebig viele Strings abspeichern kann. Meine Idee war, ein Pointer Array auf char Pointer.
static char** cnptr=NULL;
Wenn ich weiss, wieviele Spalten ich brauche, reserviere ich den Speicher
cnptr = (char **) calloc(doc_anz_spalten, sizeof(**cnptr));
Und weise die Werte aus dem XML in einer for Schleife zu
Code:
for(int i = 0; i < doc_anz_spalten; i++) {
xmlItem = xmlNodeGetContent(node->nodeTab[i]);
char *string = new char[strlen((char *)xmlItem)+1];
strcpy( string, (char *)xmlItem);
cnptr[i]=string;
xmlFree(xmlItem);
}
Das funktioniert auch perfekt. Aber leider kriege ich beim Speicher freigeben eine Speicherschutz verletztung im Heap.
Code:
if(cnptr !=NULL){
for(int i=0;i<doc_anz_spalten;i++){
delete cnptr[i];
}
free(cnptr);
cnptr = NULL;
}
Kann mir jemand hier weiterhelfen? Was mache ich falsch. Wo ist der Denkfehler. Bin ja schon überrascht, dass der erste Teil funktioniert.

Gruß
Flo