[C++] Warum gibt folgender Code einen Fehler?

linchris

Cadet 4th Year
Registriert
Okt. 2004
Beiträge
72
Code:
#include <iostream>
#include <string>
using namespace std;

class elem
{
public:
	string m_data;

	void out()
	{
		cout << m_data << endl;
	}
};


int main()
{
	elem *pElem;
	pElem = new elem;
	pElem->m_data = "testString";
	pElem->out();
	delete[] pElem; // hier gibts den Fehler!
	return 0;
}

Wenn die Variable m_data der Klasse Elem nicht String sondern z.B. int ist, dann Funktioniert alles wunderbar.

Der Fehler
DebugFehler.JPG
 
Kann es daran liegen, dass m_data als Pointer realisiert ist, der nicht in initialisiert wurde.
Beim delete wird dann versucht, einen undefinierten Pointer freizugeben.
int ist kein pointer, und deshalb klappts damit.

Also beim new elem müsste der String m_data auf null initialisiert werden.
Ich kann nur wenig C++, aber so wäre das in C.
 
Das liegt daran, dass du mit delete[] Speicher freigibst den du mit new belegt hast. Richtig wäre in deinem Fall das "normale" delete.
 
Lass mal das [] bei delete weg, also
delete pElem;
[] brauchst du imo nur, wenn du ein Array aus Pointern hast.

An dem string dürfte es nicht liegen, da der aus der STL von C++ kommt und eine eigenen eigenen Destruktor haben müsste.
 
Noch ein kleiner Tipp am Rande:

Vor dem Löschen sollte man immer überprüfen, ob es überhaupt etwas zu Löschen gibt.

Also z.B.

Code:
if( pElem )
{
    delete pElem;
    pElem = NULL
}


grüssle :)
 
EdelSchädel schrieb:
Noch ein kleiner Tipp am Rande:

Vor dem Löschen sollte man immer überprüfen, ob es überhaupt etwas zu Löschen gibt.
Die Überprüfung ist unnötig, denn der delete Operator kann auch auf NULL angewendet werden (und macht dann einfach nichts).
 
Das schon - allerdings deutet es auf Code-Fehler hin, wenn man versucht, NULLs zu löschen.
 

Ähnliche Themen

W
  • Gesperrt
  • Frage
2 3
Antworten
45
Aufrufe
2.653
Antworten
10
Aufrufe
761
Antworten
10
Aufrufe
946
Antworten
12
Aufrufe
2.104
Zurück
Oben