delete exception Invalid Address specified
-
Hi hab mal wieder ein kleines Problem:
Ich habe folgende Funktion:int CFtpFileInfo::ParseFtpLink(char *pchar) { int itype=0; char *pend = (char*) new char [512]; if ((pend=strstr(pchar,"-> "))!=NULL) { *pend='\0'; pchar=pend + 3; if ((pend=strstr(pchar,"."))!=NULL) { itype=2; } else { itype=1; } } delete [] pend; return itype; }
Ab und an bekomme ich beim
delete [] pend;
folgende Fehlermeldung?
Invalid Address specified to RtlValidateHeap( 00330000, 00D900E4 )
Woran kann das liegen? Es kommt nicht bei allen Daten vor die ich übergebe.
Mir ist klar das ich auch aufs delete verzichten könnte und entweder sochar chrdata[255];
oder so
char chrdata[255]; char *pdata=chrdata;
arbeiten könnte.
Ich möchte aber gerne mit Pointern arbeiten und hatte bisher auch keine Probleme.
Kann mir einer sagen warum ich die Fehlermeldung bekomme?
Danke!
-
Ich habe die Funktion jetzt mal abgeändert:
int CFtpFileInfo::ParseFtpLink(char *pchar) { int itype=0; char *pend; if ((pend=strstr(pchar,"-> "))!=NULL) { *pend='\0'; sprintf(pchar,"%s",pend+3); if ((pend=strstr(pchar,"."))!=NULL) { itype=2; } else { itype=1; } } return itype; }
Bitte um Erklärung:
In der Funktion übergebe ich ja nur einen Zeiger d.h. ich übergebe nur eine Speicheradresse und keinen Wert.
Ich kann den Wert aus der Variable die zum Pointer *pchar bzw. in der Adresse
die im *pchar gespeichert ist nur über die Adresse ändern, über z.B. strcat strcpy sprintf usw.
Was mich nur wundert wenn ich z.B. sage*pchar=*pend;
Wird anscheinend direkt in die Adresse die pchar hält geschrieben?!?
Wenn ich jetzt aber sage*pchar=*pend+3;
bekomme ich ein nichtdarstellbares Zeichen an erster Stelle und der Rest ist korrekt.
Der Wert aber steht dann aber auch so in der Funktion die diese Funktion aufruft.
Wo ist der Unterschied zwischen*pchar=*pend;
und
pchr=pend;
Danke schonmal!
-
Hi, frag besser im C++ Unterforum, da haben die viel mehr Ahnung als im MFC Unterforum.