Problem mit delete [] schon wieder.



  • wiso funktioniert dieser destruktor nicht?.

    class BasicSPKnote	//K gia K -Devoler ;)
    {
    //friendly
    friend ostream &operator<<(ostream &output, const BasicSPKnote &d);
    
    public:
    
    //Administrativ
    	//Konstruktor
    	BasicSPKnote(short int FlightNumber = 0, char *ArrivalAirport = '\0', char *DestinationAirport = '\0', DATE ArrivalDate = NULL, TIME ArrivalTime = NULL, DATE DestinationDate = NULL, TIME DestinationTime = NULL);
    	//De -Contruktor
    	~BasicSPKnote();
    
    //SetFunktion
    	void SetFlightNumber(short int FliegtNumber);
    	void SetArrivalAirport(char *ArrivalAirport);
    	void SetDestinationAirport(char *ArrivalAirport);
    	void SetArrivalDate(DATE ArrivalDate);
    	void SetDestinationDate(DATE DestinationDate);
    	void SetArrivalTime(TIME ArrivalTime){this->itsArrivalTime = ArrivalTime;};
    	void SetDestinationTime(TIME DestinationTime){this->itsDestinationTime = DestinationTime;};
    
    //GetFunktion
    	short unsigned int GetFlightNumber(void){return this->itsFlightNumber;}
    	DATE GetArrivalDate(void){return this->itsArrivalDate;}
    	DATE GetDestinationDate(void){return this->itsDestinationDate;}
    	TIME GetArrivalTime(void){return this->itsArrivalTime;};
    	TIME GetDestination(void){return this->itsDestinationTime;};
    	void GetArrivalAirport(char *ReturnArrivalAirport, short int &SizeofString);
    	void GetDestinationAirport(char *ReturnDestinationAirport, short int &SizeofString);
    
    private:
    	short unsigned int itsFlightNumber;
    	char *itsArrivalAirport;
    	char *itsDestinationAirport;
    	DATE itsArrivalDate;
    	TIME itsArrivalTime;
    	DATE itsDestinationDate;
    	TIME itsDestinationTime;
    
    //Secret Funktion
    	int Strlen(char *StringIn);
    };
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //							Construktor										//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    BasicSPKnote::BasicSPKnote(short int FlightNumber, char *ArrivalAirport, char *DestinationAirport, DATE ArrivalDate, TIME ArrivalTime, DATE DestinationDate, TIME DestinationTime)
    {
    	//Dhlosietabton
    //
    
    			//Kurio Programma
    	this->SetFlightNumber(FlightNumber);
    	this->SetArrivalAirport(ArrivalAirport);
    	this->SetDestinationAirport(DestinationAirport);
    	this->SetArrivalDate(ArrivalDate);
    	this->SetDestinationDate(DestinationDate);
    	this->SetArrivalTime(ArrivalTime);
    	this->SetDestinationTime(DestinationTime);
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //								Destrucktor									//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    BasicSPKnote::~BasicSPKnote()
    {
    	//Dilosh MEtablhton
    
    			//kurio Programma
    	delete [] this->itsArrivalAirport;
    	this->itsArrivalAirport = '\0';
    	delete[] this->itsDestinationAirport;
    	this->itsArrivalAirport = '\0';
    }
    


  • Wenn ich dann z.b. diese main verwende

    #include <iostream>
    #include "BasicSPKnote.hpp"
    
    using namespace std;
    
    int main()
    {
    /*
    !------ Check Point
    	DATE Test(13,2,2005);
    	DATE Sest(15,2,2005);
    
    	cout << Test.GetDay() << "." << Test.GetMonth() << "." << Test.GetYear() << endl;
    	Test.SetDay(14);
    	Test.SetMonth(2);
    	Test.SetYear(2005);
    	cout << Test.GetDay() << "." << Test.GetMonth() << "." << Test.GetYear() << endl;
    
    	cout << Test << "lala" << endl;
    	Test = Sest;
    	cout << Test << endl;
    !-------Check Point
    */
    /*
    !------- Check Point
    	TIME Test1(12,53);
    	TIME Test2(13,12);
    	cout << Test1;
    	Test1 = Test2;
    	cout << Test1;
    !------- Check Point
    */
    	DATE Test1(13,2,2005);
    	TIME Test2(20,00);
    	TIME Test3(22,00);
    	char *t = "ATH";
    	char *z = "MUC";
    	BasicSPKnote L(666,t,z,Test1,Test2,Test1,Test3);
    	cout << L << endl;
    	return 0;
    }
    

    fliegt mir alles um die ohren.



  • Hallo,
    zeig mal die Definitionen von SetArrivalAirport und SetDestinationAirport.



  • Wie sieht den dein Konstruktor aus? Du wirst ArrivalAirport und DestinationAirport nicht einfach nur zuweisen?

    Davon ab:

    delete [] this->itsArrivalAirport;
        // this->itsArrivalAirport = '\0'; // <--- kompletter Unsinn
        delete[] this->itsDestinationAirport;
        // this->itsArrivalAirport = '\0'; // <--- dto
    

    Die letzten Meldungen von gestern: In der C++ Standardbibliothek lässt sich seit neuestem der std::string finden! 👍



  • Ich poste mall die ganze datei. Ist zwar nicht das besste programm :p :p aber naja haupsahe es funktioniert irgentwie.

    class BasicSPKnote	
    {
    //friendly
    friend ostream &operator<<(ostream &output, const BasicSPKnote &d);
    
    public:
    
    //Administrativ
    	//Konstruktor
    	BasicSPKnote(short int FlightNumber = 0, char *ArrivalAirport = '\0', char *DestinationAirport = '\0', DATE ArrivalDate = NULL, TIME ArrivalTime = NULL, DATE DestinationDate = NULL, TIME DestinationTime = NULL);
    	//De -Contruktor
    	~BasicSPKnote();
    
    //SetFunktion
    	void SetFlightNumber(short int FliegtNumber);
    	void SetArrivalAirport(char *ArrivalAirport);
    	void SetDestinationAirport(char *ArrivalAirport);
    	void SetArrivalDate(DATE ArrivalDate);
    	void SetDestinationDate(DATE DestinationDate);
    	void SetArrivalTime(TIME ArrivalTime){this->itsArrivalTime = ArrivalTime;};
    	void SetDestinationTime(TIME DestinationTime){this->itsDestinationTime = DestinationTime;};
    
    //GetFunktion
    	short unsigned int GetFlightNumber(void){return this->itsFlightNumber;}
    	DATE GetArrivalDate(void){return this->itsArrivalDate;}
    	DATE GetDestinationDate(void){return this->itsDestinationDate;}
    	TIME GetArrivalTime(void){return this->itsArrivalTime;};
    	TIME GetDestination(void){return this->itsDestinationTime;};
    	void GetArrivalAirport(char *ReturnArrivalAirport, short int &SizeofString);
    	void GetDestinationAirport(char *ReturnDestinationAirport, short int &SizeofString);
    
    private:
    	short unsigned int itsFlightNumber;
    	char *itsArrivalAirport;
    	char *itsDestinationAirport;
    	DATE itsArrivalDate;
    	TIME itsArrivalTime;
    	DATE itsDestinationDate;
    	TIME itsDestinationTime;
    
    //Secret Funktion
    	int Strlen(char *StringIn);
    };
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //							Construktor										//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    BasicSPKnote::BasicSPKnote(short int FlightNumber, char *ArrivalAirport, char *DestinationAirport, DATE ArrivalDate, TIME ArrivalTime, DATE DestinationDate, TIME DestinationTime)
    {
    	//Dhlosietabton
    //
    
    			//Kurio Programma
    	this->SetFlightNumber(FlightNumber);
    	this->SetArrivalAirport(ArrivalAirport);
    	this->SetDestinationAirport(DestinationAirport);
    	this->SetArrivalDate(ArrivalDate);
    	this->SetDestinationDate(DestinationDate);
    	this->SetArrivalTime(ArrivalTime);
    	this->SetDestinationTime(DestinationTime);
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //								Destrucktor									//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    BasicSPKnote::~BasicSPKnote()
    {
    	//Dilosh MEtablhton
    
    			//kurio Programma
    	delete [] this->itsArrivalAirport;
    	this->itsArrivalAirport = '\0';
    	delete[] this->itsDestinationAirport;
    	this->itsArrivalAirport = '\0';
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //	Eisodos	:	tipota.														//
    //																			//
    //	Exodos	:	Epistrefh mia sumbolosira kai to mege8os tis me tin sira.	//
    //																			//
    //	Skopos	:	antigrafi apo tin class mas to GetArrivalAirport.			//
    //																			//
    //	Xronos	:	O(n).														//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    void BasicSPKnote::GetDestinationAirport(char *ReturnDestinationAirport, short int &SizeofString)
    {
    	//dilosh MEtablhton
    	register short int Counter;	//counter se turbo mod
    //
    	Counter = 0;
    
    				//Kurio Programma
    
    	//Desmeuoume gia ReturnArrivalAirport
    	ReturnDestinationAirport = new char[4];
    
    	//Copia apo to ArrivalAirport tis class sto ReturnArrivalAirport
    	for(Counter = 0; Counter < 3; Counter ++);
    	{
    		ReturnDestinationAirport[Counter] = this->itsDestinationAirport[Counter];
    	}
    	SizeofString = 4;
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //	Eisodos	:	tipota.														//
    //																			//
    //	Exodos	:	Epistrefh mia sumbolosira kai to mege8os tis me tin sira.	//
    //																			//
    //	Skopos	:	antigrafi apo tin class mas to GetArrivalAirport.			//
    //																			//
    //	Xronos	:	O(n).														//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    void BasicSPKnote::GetArrivalAirport(char *ReturnArrivalAirport, short int &SizeofString)
    {
    	//dilosh MEtablhton
    	register short int Counter ;	//counter se turbo mod
    //
    	Counter = 0;
    
    				//Kurio Programma
    
    	//Desmeuoume gia ReturnArrivalAirport
    	ReturnArrivalAirport = new char[4];
    
    	//Copia apo to ArrivalAirport tis class sto ReturnArrivalAirport
    	for(Counter = 0; Counter < 3; Counter ++);
    	{
    		ReturnArrivalAirport[Counter] = this->itsArrivalAirport[Counter];
    	}
    	SizeofString = 4;
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //	Eisodos	:	Dexete enan DAte dedomeno.									//
    //																			//
    //	Exodos	:	tipota.														//
    //																			//
    //	Skopos	:	Apo8ikeuh tin eisodo stin class.							//
    //																			//
    //	xronos	:	O(1).														//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    void BasicSPKnote::SetDestinationDate(DATE DestinationDate)
    {
    	//dhlosh MEtablhton
    //
    
    				//Kurio Programma
    	this->itsDestinationDate = DestinationDate;
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //	Eisodos	:	Dexete enan tipo Date.										//
    //																			//
    //	Exodos	:	Tipota.														//
    //																			//
    //	Skopos	:	Apo8ikeuh mesa tin calass tin isodos.						//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    void BasicSPKnote::SetArrivalDate(DATE ArrivalDate)
    {
    	//dhlosh Metablhton
    //
    		//Kurio Programma
    	this->itsArrivalDate = ArrivalDate;
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //	Eisodos	:	Dexete ena string kai to antigrafi sto itsArrivalAirport.	//
    //																			//
    //	Exodos	:	Tipota.														//
    //																			//
    //	Skopos	:	Antigrafi den kseri polla antigrafi monon 3 pragmata.		//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    void BasicSPKnote::SetDestinationAirport(char *DestinationAirport)
    {
    	//Dhilosh MEtablhton
    	register unsigned short int i;	//Metritis se turbo modus
    	static int Called = 0;
    //
    	i = 0;
    
    		//Kurio Programma
    	if(Called > 0)
    	{
    		/*Debug line*/cout << "katstrepsou skouliki" << endl;
    		delete[] this->itsDestinationAirport;
    		this->itsDestinationAirport = "\0";
    	}
    
    	this->itsDestinationAirport = new char[4];
    	for(i = 0;i <= 4; i++ )
    	{
    		this->itsDestinationAirport[i] = DestinationAirport[i];
    	}
    	Called ++;
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //	Eisodos	:	Dexete ena string kai to antigrafi sto itsArrivalAirport.	//
    //																			//
    //	Exodos	:	Tipota.														//
    //																			//
    //	Skopos	:	Antigrafi den kseri polla antigrafi monon 3 pragmata.		//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    void BasicSPKnote::SetArrivalAirport(char *ArrivalAirport)
    {
    	//Dhilosh MEtablhton
    	register unsigned short int i;	//Metritis se turbo modus
    	static int Called = 0;
    //
    	i = 0;
    
    		//Kurio Programm
    
    	if(Called > 0)
    	{
    		/*Debug line*/cout << "katstrepsou skouliki" << endl;
    		delete[] this->itsArrivalAirport;
    	}
    
    	this->itsArrivalAirport = new char[4];
    	for(i = 0;i <= 4; i++ )
    	{
    		itsArrivalAirport[i] = ArrivalAirport[i];
    	}
    	Called ++;
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //	Eisodos	:	Ena flightNumber.											//
    //																			//
    //	Exodos	:	Tupota.														//
    //																			//
    //	Skopos	:	apo8ikeuh mesa stin class mas.								//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    void BasicSPKnote::SetFlightNumber(short int FlightNumber)
    {
    	//Dhlosh Metablhtos
    //
    
    		//Kurio Programma
    	if(FlightNumber > 999 || FlightNumber < 0)
    	{
    		cout << "!!!FATAL ERROR!!! ##__FILE__## 000 000. La8os isodo dedomenon times 0 ews 999 mono." << endl;
    		exit(EXIT_FAILURE);
    	}
    
    	BasicSPKnote::itsFlightNumber = (short int unsigned)(FlightNumber);
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //	Eisodos	:	Ena flightNumber.											//
    //																			//
    //	Exodos	:	Tupota.														//
    //																			//
    //	Skopos	:	apo8ikeuh mesa stin class mas.								//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    int BasicSPKnote::Strlen(char *StringIn)
    {
    	//Dhlosh MEtablhton
    	char *p = StringIn;
    
    	while(*p != '\0')
    	{
    		p++;
    	}
    	return (p-StringIn);
    }
    
    //////////////////////////////////////////////////////////////////////////////
    //																			//
    //					friendly output barieme na grapso tora.					//
    //																			//
    //////////////////////////////////////////////////////////////////////////////
    
    ostream &operator<<(ostream &output, const BasicSPKnote &d)
    {
    	//dilosh Metablhton
    
    				//Kurio Programma
    	output << d.itsFlightNumber << " " << d.itsArrivalAirport << " " << d.itsDestinationAirport << " " << d.itsArrivalDate << " " << d.itsArrivalTime << " " << d.itsDestinationDate << " " << d.itsDestinationTime;
    
    	return output;
    }
    


  • Master User schrieb:

    Ich poste mall die ganze datei.

    Das hättest du dir sparen können. Die beiden Funktionen die ich dir genannt habe hätten gereicht.

    void BasicSPKnote::SetDestinationAirport(char *DestinationAirport)
    {
    	[...]
    	this->itsDestinationAirport = new char[4];
    	for(i = 0;i <= 4; i++ )
    	{
    		this->itsDestinationAirport[i] = DestinationAirport[i];
    	}
    	Called ++;
    }
    

    Hier ist dein Fehler.
    Schau dir noch mal an, wie man in C++ zählt. Insbesondere wo man beginnt.

    Ist zwar nicht das besste programm

    Genaugenommen ist das mehr eine Katastrophe als ein Programm.

    aber naja haupsahe es funktioniert irgentwie

    Mit dieser Einstellung kommst du nicht weit. Und viele Freunde wirst du dir damit auch nicht machen. Besonders wenn du mal in einem Team programmieren solltest.



  • Ah ja s%/& genau bis drei DANKE!!!!!!!!!!! 👍

    Okey ich werde jetzt woll diese funktion ganz endern, da static nicht das beste ist.

    hbt ihr eine ide dazu fr diesesproblem
    http://www.c-plusplus.net/forum/viewtopic.php?t=101270


Anmelden zum Antworten