• Wir werden in den nächsten Tagen verschiedene Wartungsoperationen und Optimierungen am Server durchführen. Es wird zu mehreren Ausfällen kommen, die teilweise auch mehrere Stunden umfassen können.

C++ - Klassen und reservierter Speicher

zokker13

Moderator
Joined
Oct 12, 2008
Messages
6,719
Points
235
Moin zusammen,

in der Schule sind wir an dem Punkt angelangt, wo es um OOP und um Klassen geht.

Haben uns also den elementaren Aufbau angesehen (private, public, Konstruktor, Dekonstruktor sowie Methoden).
Das Prinzip einer Klasse ist mir bewusst (hoffe ich zumindest).

Unsere Aufgabe ist also, eine Klasse zu schreiben, die im Konstruktor einen festen Übergabewert hat (Char- Array mir 40 + 1 Elementen).
Als Erweiterungsaufgaben den ganzen Spaß ohne jegliche Begrenzung (also Speicherreservierung). Und hier bekomme ich Probleme..

Die Klasse sieht dabei folgendermaßen aus:

Code:
#include <iostream>
#include <String.h>

using namespace std;


class Klasse
{
private:
	char *Text;


public:
	Klasse() 
	{ 
		cout << "Konstruktor sagt: \"hi\"" << endl;
		char *cStandard = "WhatEvaa";

		this->Text = new char[strlen(cStandard)];

		strcpy(this->Text, cStandard);
	}

	Klasse(char *Text)
	{
		cout << "Konstruktor sagt: \"hi\"" << endl;

		this->Text = new char[strlen(Text)];

		strcpy(this->Text, Text);
	}

	~Klasse()
	{
		cout << "Konstruktor sagt: \"ciao\"" << endl;

		delete[] this->Text;
		
	}
	
	void SetVal(char *value)
	{
		this->Text = new char[strlen(value)];

		strcpy(Text, value);
	}

	char* GetVal()
	{
		return Text;
	}

};


Das ganze wird über die main- Methode folgendermaßen aufgerufen:

Code:
#include <iostream>
#include <String.h>
//#include "Stack Klasse.cpp"
#include "Heap Klasse.cpp"

using namespace std;

int main()
{
	Klasse *k = new Klasse();
	k->SetVal("pewpew");
	
	cout << "Inhalt: " << k->GetVal() << endl;

	delete k;


	return 0;
}


Die Fehlermeldung nach dem Erstellen:



Manchmal funktioniert es, macnhmal nicht.
Normalerweise gibt es aber den Fehler..

Benutzt wurde VS2012. Werde es demnächst auf einer Linuxdistribuztion testen.

Hoffe jemand kann mir helfen. :>
 
(strlen + 1) für den NULL-Character am Ende eines Strings.

Persönliche Anmerkung: Mach mal den Parameter "Klasse(char *Text)" zu einem "Klasse(char *ParamText)" oder so. Dass es unten nicht so aussieht:

Code:
this->Text = new char[strlen(Text) [COLOR="#FF0000"]+ 1[/COLOR]];

		strcpy(this->Text, Text);

Sondern so:

Code:
this->Text = new char[strlen(ParamText) [COLOR="#FF0000"]+ 1[/COLOR]];

		strcpy(this->Text, ParamText);

Sowas ist sonst immer sehr hässlich zu lesen.
 
Hallo,

funktioniert prima so!
Hatte tatsächlich den Null- Terminator vergessen. So ein Mist!


Die Sache mit dem Übergabewert war sogar Absicht. Wollte nicht glauben was der Lehrer da gesagt hat.


Danke für Deine Hilfe!
 
Back
Top Bottom