Abnormaler programmabbruch: speicherzugriffsfehler?!



  • Irgendwie seh ich grad nicht durch...

    mir segelt das programm permanent bei der Methode "getPrinterByName" und beim destructor ab... hab aber irgendwie grad Tomaten auf den Augen, ich hoffe einer von euch kann mir mal weiterhelfen:

    #include <iostream>
    #include <string>
    
    #include "classes.hpp"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    	customer* EON;
    	entry* test;
    	printer* tempPrinter;
    
    	EON = new customer( "E.ON IS" );
    	EON->addPrinter( new printer( "K0UV" ) );
    
    	entry* insert = new entry("01/08/02;13:16:54;K0UV;5213;000P9YsT.P82");
    	cout << EON->getPrinterCount() << endl;
    
    	tempPrinter = EON->getPrinterByName( ( insert->getprintername() ) );
    		system("PAUSE");
    	if ( !tempPrinter ) EON->addPrinter( new printer( insert->getprintername() ) );
    
    	delete EON;
        return EXIT_SUCCESS;
    }
    
    class customer {
    private:
    	string customername;	//	name of the customer
    	vector<printer*> printers;	//	stores the printer objects
    
    public:
    	customer ( char* name ) : customername( name ) { }	//	creates a new customer-object
    	customer ( string name ) : customername( name ) { }	//	creates a new customer-object
    	~customer ( ) {										//	deletes printer and destroyes the customer-object
    		for ( int i = printers.size()+1; i >= 0; --i ) {
    			delete printers.at( i );
    			printers.at( i ) = NULL;
    		}
    	}
    	void addPrinter ( printer* newPrinter ) { printers.push_back( newPrinter ); }	//	adds a printer
    	printer* getPrinter ( int index ) { return printers.at( index ); }	//	returns a pointer of the selected printer
    	printer* getPrinterByName ( string name ) {			//	returns pointer to printer with printername == name
    		for ( int i = printers.size()+1; i >= 0; --i )
    			 if ( (printers.at(i))->getPrinterName() == name ) return printers.at(i);
    		return NULL;
    	}
    	int getPrinterCount ( ) { return printers.size(); }	//	returns the number of printers for the printer
    	string getCustomerName ( ) { return customername; }	//	returns customername
    };
    
    class printer {
    private:
    	string printername;		//	name of the printer
    	vector<entry*> logs;	//	stores the datalines stored in entry-objects
    
    public:
    	printer ( char* name ) : printername( name ) {}		//	creates a new printer
    	printer ( string name ) : printername( name ) {}	//	creates a new printer
    	~printer ( ) {										//	deletes loglines and destroyes the printer-object
    		for ( int i = logs.size()+1; i >= 0; --i ) {
    			delete logs.at( i );
    			logs.at( i ) = NULL;
    		}
    	}
    	void addLogLine ( entry* newEntry ) { logs.push_back( newEntry ); }	//	adds a log entry
    	entry* getLogLine ( int index ) { return logs.at( index ); }	//	returns a pointer of the selected log entry
    	int getLineCount ( ) { return logs.size(); }		//	returns the number of log entries for the printer
    	string getPrinterName ( ) { return printername; }	//	returns printername
    };
    


  • statt

    for ( int i = printers.size()+1; i >= 0; --i )
    

    machs so

    for ( int i = printers.size()-1; i >= 0; --i )
    


  • danke, nu gehts 🙄 ich sachte ja, ich hab tomaten auf den Augen 😃


Anmelden zum Antworten