Laufzeitfehler bei dynamischen Speicher
-
Hallo,
ich habe mit folgender Methode einer Klasse Probleme:
[cpp]bool Puffer::loeschen(int stelle)
{
if(stelle>=1 && stelle<=aklaenge) // Überprüfung der Existenz der zu löschenden Stelle
{
char* temp=new char[aklaenge-1]; // Temporärer Zwischenspeicher für den Pufferfor(int i=0;i<stelle;i++)
temp[i]=puffer[i];
for(i=stelle+1;i<=aklaenge;i++)
temp[i]=puffer[i];delete[] puffer;
aklaenge--;
puffer=new char[aklaenge]; // Puffer um eins verkürzenfor (i=0;i<aklaenge;i++)
puffer[i]=temp[i];delete[] temp;
return true;
}
else
return false;
}[/cpp]Wenn ich das delete[] temp; weglasse,funktioniert die Methode einwandfrei,lasse ich es aber stehen,dann kommt immer ein Laufzeitfehler beim Aufruf der Methode!
Hat jemand einen Ahnung woran das liegen könnte?
Danke für eure Mühe
Tobias
-
Probier doch mal folgendes:
vector<char> puffer; bool loeschen( int stelle ) { // Überprüfung der Existenz der zu löschenden Stelle if( (stelle > 0) && (stelle <= puffer.size()) ) { puffer.erase( puffer.begin()+stelle, puffer.end() ); return true; } else { return false; } } int main() { puffer.assign( 10, '0' ); for( char i='0'; i<='9'; i++ ) { puffer[i] = i; } loeschen( 7 ); return 0; }
Das sollte um einiges schneller sein als deine Methode und ist zudem noch "sicher".
Viele Grüße
Bastian
-
Vielen Dank erstmal Gerard für die "optische" Hilfe.
Auch dir schern danke für deine Hilfe,ich werde das ausprobieren,
kann mir vielleicht trotzdem noch jemand sagen,wo in meiner Methode der Fehler liegt?
-
Hier ist die Fehlermeldung,die er ausgibt:
"DAMAGE: after Normal block (#65) at 0x008C1EE0"
Beim Anklicken von Wiederholen erscheint dann folg. Fehlermeldung:
"Die Ausnahme "unknown software exception" (0x80000003) ist in der Anwendung an
der Stelle 0x00423eaf aufgetreten."Kann damit jemand etwas anfangen?
-
Du holst nicht genug Speicher für temp bzw. du schreibst zwei Bytes über das Ende des geholten Speichers hinaus.
-
Meinst du hier:
for(i=stelle+1;i<=aklaenge;i++) temp[i]=puffer[i];
Selbst wenn ich das in der for-Schleife in ein < ändere,kommt die gleiche
Fehlermeldung.
Oder meinst du eine andere Stelle?
-
TobiasG82 schrieb:
Selbst wenn ich das in der for-Schleife in ein < ändere,kommt die gleiche
Fehlermeldung.Logisch. Denn dann schreibst immer noch ein Byte über das Ende hinaus.
Du allokierst aklaenge-1 chars für temp.
Also kannst du von temp[0] bis temp[aklaenge-2] darauf zugreifen.
-
Vielen Dank das du das Brett vorm Kopf weggenommen hast!!!!
Man,mit dem Zählen ist das so eine Sache!!!
-
TobiasG82 schrieb:
Vielen Dank das du das Brett vorm Kopf weggenommen hast!!!!
Man,mit dem Zählen ist das so eine Sache!!!Warum? Man zaehlt einfach von 0 bis Laenge - 1.
Is doch nicht so schwer
mfg
v R