Fehlermldung beim Starten des Programmes



  • Hallo Leute,

    vorerst ich mein Problem schildere ich bin ein Anfäger 😞 So jetzt zu mein Problem,- ich habe ein Projekt Programmiert, in der ich Personen Verwalte, sprich den User auffordere Daten einzugeben und dann wird die Eingabe von der Konsole wieder ausgegeben -

    Mein Problem:

    Beim Quellcode Person.cpp in der Zeile 60 übergebe ich dem Attribut einen pointer dessen Inhalt ein char ist. (Ich habe es extra Kommentiert, so bekomme ich keine Fehlermedlung.
    Beim Programmende gleichzeitig beim Aufruf des Destruktors (Zeile 35) gebe ich mein Speicher wieder frei, womit der Compiler irgendwie nicht zufrieden ist.

    Könnt Ihr mir vielleicht sagen wieso,weshalb,warum???

    Freue mich jetzt schon auf eure antworten besten dank im VOraus!!!

    Meine Fehlermeldung:
    http://www.pic-upload.de/view-21167995/Unbenannt.png.html

    //Hautprogramm
    //main.cpp
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include "Person.h"
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	CPerson kunde; 
    		cout <<"Personen einlesen!" << endl;
    
    			kunde.set_vorname(kunde.vorname_einlesen());
    			kunde.set_nachname(kunde.nachname_einlesen());
    			kunde.set_alter(kunde.alter_einlesen());
    
    //Header.h
    //Deklarationen
    public:
    
    	char* nationalitaet;
    
    	CPerson();// Standardkonstruktor
    
    	CPerson(CPerson &andere_person);  //Kopierkonstruktor
    
    	~CPerson();//Destruktor
    	void operator = (const CPerson &andere_person);		//Überladung des Zuweisungsoperators
    
    	void set_vorname(char* neu);	//setter <-> getter
    	void set_nachname (char* neu);
    	void set_alter(int neu);
    
    	void print(char*);										
    	char* vorname_einlesen(); 
    	char* nachname_einlesen(); 
    	char* nationalitaet_einlesen();
    	int alter_einlesen(); 
    };
    
    //Person.cpp
    //Implementationen
    CPerson::CPerson () {
    
    		cout << "Konstruktor!" << endl << '\n';
    		vorname  = 0L;
    		nachname = 0L;
    		alter    = 0;
    		nationalitaet = 0L;
    	} 
    
    	//Kopierkonsturktor
    	CPerson::CPerson(CPerson &andere_person) {
    
    		cout << '\n' << "Kopierkonstruktor!!! " << endl;
    		vorname  = 0L;
    		nachname = 0L;
    		alter    = 0;
    		nationalitaet = 0L;
    
    		set_vorname(andere_person.vorname);
    		set_nachname(andere_person.nachname);
    		set_alter(andere_person.alter);
    
    		nationalitaet = andere_person.nationalitaet;
    
    	}
    
    	CPerson::~CPerson () {
    		cout << '\n' << "Destruktor!!" << endl;
    
    		delete (vorname);
    		delete (nachname);
    		delete (nationalitaet);
    	}
    
    	// Überladung des zuweisungsoperators!!!
    	void CPerson::operator = (const CPerson &andere_person) {
    
    		cout<<'\n'<< "Operator!!!" << endl;
    		set_vorname (andere_person.vorname);
    		set_nachname(andere_person.nachname);
    		set_alter   (andere_person.alter);
    		nationalitaet = andere_person.nationalitaet;
    	}
    
    char* CPerson::nationalitaet_einlesen() {
    
    	cout <<"Bitte Nationalitaet eingeben: " << endl;
    
    	 char eingabe[50];
    	 char* ptr;
    
    		cin >> eingabe;
    		ptr = new char [strlen(eingabe-1)];
    		ptr = _strdup(eingabe);
    
    		//nationalitaet = ptr;
    	return ptr;
    
    	}
    


  • new[] braucht delete[].
    Aher benutz std::string für so etwas!
    Der ist exceptionsafe (dein Code überhaupt nicht!), der vergrößert sich bei Bedarf und nimmt dir einfach Arbeit ab. Nimm ihn einfach! Der ist vermutlich schneller als dei. Gefrockel und besser. Jedes map, wenn du new[] verwendest, machst du was falsch.



  • Besorg dir ein anständiges Buch (Suchfunktion benutzen!). Diese C-String hampelei hast du nicht im Ansatz verstanden und das solltest du als Anfänger auch erst gar nicht versuchen.


Log in to reply