Fehler mit dem Speicher -> wo ist der fehler ?



  • hm sollte man nicht nach dem löschen eines zeiger in auf 0 setze ?

    a) da spassiert normalerweise automatisch
    b) das was du gemacht hast, war den inhalt des zeigers auf 0 zu setzen

    //edit kannst du uns wenigstens sagen, was du im programm machst, damit es einstürzt? zb ob du die arbeiter anzeigst, doer einen neuen erstellst.



  • huh !

    ok, aber was ist nun der fehler ?

    könnt ihr mir bitte helfen ?
    ich habe mich schon lange damit befasst und melde mich jetzt im forum weil ich echt 0 ahnung hab was los is



  • was machst dud enn, damit das programm abstürzt?
    bisher hast du uns so ca 0 infos gegeben-.-



  • einfach einen erstellen



  • Ich erstelle einen einfach und das programm stürtz danach sofort ab



  • hmm dacht ich mir.

    ok, mach mal aus:
    DynamicArray DArray(0);
    ein
    DynamicArray DArray(1);

    nur als test.



  • das gleiche... nachdem der konstrukter aufgerufen wird und ich im menü einen hinzufügen will stürtzt es wieder ab.

    der Array sollte eigentlich sich automatisch vergrößern, wenn nicht genügend speicher vorhanden ist

    /* Code dazu steht bei dynamicArray.h methode lautet push(worker arbeiter)*/



  • hab den fehler jetzt. Debugger benutzen hilft.
    erstmal tu ich das, was ich die ganze zeit tun wollte: ich leg dich übers knie, weil du einzelne ints auf den heap sperrst.

    Und nun zum grund:
    du benutzt ein array. Daran ist erstmal nichts schlimmes. Aber der teufel liegt nunmal im detail:

    pWorker = new Worker[max];
    

    das ruft keinen ctor auf,du hast also ganz viele pointer die auf nichts zeigen.
    das nächste was passiert ist, dass du den op= für die Klasse aufrufst.
    dh, du rufst für pointer, die auf 0 zeigen delete auf, und das macht richtig aua.
    dazu muss ich dich nochwas fragen: wieso rufst du für die pointer erst delete auf? was spricht dagegen, den speicherplatz wiederzuverwenden?

    hier die fehlerfreie workerklasse

    class Worker{
        private:
    		int Selery;
    		int Age;
    		string Vname;
    		string Nname;
    
        public:
    		Worker();
    		~Worker();
    		Worker(const Worker&);
    		Worker& operator=(const Worker&);
    
    		void SetSelery(int SSele) { Selery = SSele; }
    		void SetAge(int SAge) { Age = SAge;}
    		void ChangeVname(string SVname) { Vname = SVname; }
    		void ChangeNname(string SName) { Nname = SName; }
    
    		int GetSelery() const { return Selery;}
    		int GetAge() const { return Age; }
    		string GetVname() const { return Vname; }
    		string GetNname() const { return Nname; }   
    };
    
    Worker::Worker(){
    
    	cout << "Vorname: ";cin  >> Vname;
    	cout << "\nNachname: ";cin  >> Nname;
    	cout << "\nLohn: ";cin  >> Selery;
    	cout << "\nAlter: ";cin  >> Age;
    	cout << endl;
    
        system("cls");
    }
    
    Worker::~Worker(){}
    
    Worker::Worker(const Worker& rhs)
    {
        this->operator=(rhs);
    }
    
    Worker& Worker::operator =(const Worker& rhs)
    {
        if(this == &rhs)
            return *this;
    
        Selery    = rhs.GetSelery();
        Age    = rhs.GetAge();
        Vname    = rhs.GetVname();
        Nname    = rhs.GetNname();
        return *this;
    }
    

    die variablen musst du garnicht auf den heap sperren, da dein array eh auf dem heap liegt. string speichert seinen inhalt automatisch auf den heap, und int ist zu klein, um ein platz problem zu werden.



  • ok vielen dank 🙂



  • otze schrieb:

    hm sollte man nicht nach dem löschen eines zeiger in auf 0 setze ?

    a) da spassiert normalerweise automatisch

    Ach ja? Das wäre mir neu.
    Zeiger auf null zu setzen, wenn sie nicht mehr gebraucht werden, macht keinen Sinn.

    otze schrieb:

    dh, du rufst für pointer, die auf 0 zeigen delete auf, und das macht richtig aua.

    Nee, macht es nicht.


Anmelden zum Antworten