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