[c++] Finde Fehler nicht

AndreBrueck

Mitglied
Hallo,

ich versuche jetzt schon seit Stunden in nem kleinen Übungsprogramm meinen Fehler zu finden, bekomme es aber einfach nicht hin.

Es währe nett wenn jemand von euch mal kurz drüber sehen könnte.

Gruß
André
 

Anhänge

wenn ich das nur wüsste....

Die Fehlermeldung:
Code:
    2 [main] blatt10_aufgabe1 1660 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
   1057 [main] blatt10_aufgabe1 1660 open_stackdumpfile: Dumping stack trace to blatt10_aufgabe1.exe.stackdump
hängt mit der Zeile zusammen:
Code:
telbuch.append(Person("Dummy","123456"));

das die append Methode:
Code:
void Telefonbuch::append(const Person& p){	
	this->arrPerson[this->nr_elements]=p;
	this->nr_elements++;	
}

und der Konstruktor von Person:
Code:
Person::Person(const char* actName, const char* actNr1){
	this->str_Name=actName;	
	this->iAnz_Nummern=1;
	this->astr_Nummern = new string[iAnz_Nummern];
	this->astr_Nummern[0]=actNr1;
}

weis nicht ob das weiter hilft...?:(
 
Du mußt Speicher den du mit dem new[] Operator alloziert hast, mit dem delete[] Operator freigeben, nicht mit dem delete Operator.

Wenn du etwas mit delete bzw. delete[] freigibst muß das entweder ein valider Zeiger auf vorher allozierten Speicher sein oder ein Nullpointer. D.h. du solltest astr_Nummern mit 0 im Standardkonstruktor (und allen anderen Konstruktoren) initialisieren. Du solltest Telefonbuch::nr_elements mit 0 initialisieren.

Initialisierungen von integralen Typen machst du am besten in der Initialisierungsliste eines Konstruktors - nicht im Anweisungsblock des Konstruktors.

Du brauchst nicht this-> innerhalb einer Methode zu verwenden um auf die Eigenschaften oder Methoden des Objekts zuzugreifen.

Man sollte niemals den Namensraum std in einem Header einbinden, da das ja direkt Auswirkungen auf alle Dateien hat die diesen Header benutzen.

Du benötigst in der Klasse Person auch noch einen Zuweisungsoperator damit du da das astr_Nummern Array kopieren kannst - sonst zeigen die Pointer von zwei Objekten auf das gleiche Array; wenn ein Objekt und damit der Speicher zerstört wird geht's dann schief...

Die Konstruktoren könntest du noch etwas zusammenfassen indem du Standardwerte für die optionalen Parameter verwendest.

Gruß
 
Zuletzt bearbeitet:
naja, das Problem lag nur an einer Stelle, an nr_elements, da ich das nicht mit 0 allokiert hatte, der Rest ist wohl einfach nicht schön programmiert, aber damit komm ich nun wenigstens weiter und kann die anderen "Fehler" noch beheben...:-( :-( :-(
 
Naja, also delete statt delete[] zu verwenden ist schon ein schwerer Fehler.

Übrigens kannst du beim GCC (du verwendest Cygwin, oder?) die Option -Weffc++ mal ausprobieren, die zeigt dir dann noch ein paar Unschönheiten an.

Gruß
 
Hast schon recht damit, dass mein Quellcode alles andere als schön ist und sicher noch so einige Fehler enthält.

Habe bisher noch nicht viel Erfahrung mit c++, so möge man mir mein schlechten Programmierstiel verzeihen. Hoffe mal das bekomm ich alles noch geregelt, damit alles richtig und hübsch wird....

Ich verwende gcc mit cygwin, werd das mal ausprobieren mit der Option.
 
Zurück