Ich habe in meinem Programm gerade ein erhebliches Problem gelöst, aber ich weiss nicht genau wie bzw. was für Nebeneffekte dass das haben kann. Möchte daher gerne schnell eine Theoretische Frage stellen.
Nehmen wir an ich habe einen Pointer auf eine Classe mit einem dynamischen Array drinn:
class MyClass
{
public:
int *MyArray;
}
MyClass *Ptr;
nehmen wir auch an das Array wurde bereits korrekt initialisiert.
Nun mache ich eine Funktion an die ein Pointer auf MyArray übergeben wird und das Array darin neu angeordnet wird:
void MyFunction( MyClass *mPtr)
{
mPtr->MyArray = NULL;
delete [] mPtr->MyArray;
//hinterher wird das Array neu initialisiert und gefüllt
}
Nun weiss ich nicht ob, wenn ich MyArray erst auf NULL setze, der Ursprüngliche Speicherbereich überhaupt freigegeben wird. Wenn er geschlossen bleibt habe ich gerade ein ziemlich grosses Speicherloch produziert, wenn er Freigegeben wird ist alles in Ordnung.
Was ich weiss ist das der Versuch MyArray zu löschen ohne es zu nullen zu einem Absturz führt, und das der Versuch mPtr zu löschen eine Heap-corruption zur Folge hat, die zwar eine Fortführung des Programms erlaubt, jedoch zu allen möglichen unvorhersehbarkeiten führt.
Kann mir jemand sagen ob das richtig ist so wie oben beschrieben, Es scheint sehr gut zu Funktionieren, aber wenn ich ein Speicherleck habe ohne es zu merken wird das nach einer halben Stunde betrieb oder so ebenfalls zum Absturz führen.
Nehmen wir an ich habe einen Pointer auf eine Classe mit einem dynamischen Array drinn:
class MyClass
{
public:
int *MyArray;
}
MyClass *Ptr;
nehmen wir auch an das Array wurde bereits korrekt initialisiert.
Nun mache ich eine Funktion an die ein Pointer auf MyArray übergeben wird und das Array darin neu angeordnet wird:
void MyFunction( MyClass *mPtr)
{
mPtr->MyArray = NULL;
delete [] mPtr->MyArray;
//hinterher wird das Array neu initialisiert und gefüllt
}
Nun weiss ich nicht ob, wenn ich MyArray erst auf NULL setze, der Ursprüngliche Speicherbereich überhaupt freigegeben wird. Wenn er geschlossen bleibt habe ich gerade ein ziemlich grosses Speicherloch produziert, wenn er Freigegeben wird ist alles in Ordnung.
Was ich weiss ist das der Versuch MyArray zu löschen ohne es zu nullen zu einem Absturz führt, und das der Versuch mPtr zu löschen eine Heap-corruption zur Folge hat, die zwar eine Fortführung des Programms erlaubt, jedoch zu allen möglichen unvorhersehbarkeiten führt.
Kann mir jemand sagen ob das richtig ist so wie oben beschrieben, Es scheint sehr gut zu Funktionieren, aber wenn ich ein Speicherleck habe ohne es zu merken wird das nach einer halben Stunde betrieb oder so ebenfalls zum Absturz führen.