Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
struct stest { char* Name; UINT Parameter; }; class ctest { private: stest Stuktur; UINT andererparameter; public: //Konstructor ctest(UINT Num); // Destructor ~ctest(); }; |
Quellcode |
|
1 2 3 4 5 6 7 8 |
ctest::ctest(UINT Num) { this->Stuktur.Name = new char [128 + 1]; this->Stuktur = new stest [Num]; } ctest::~ctest() { delete[] this->Stuktur.Name; delete[] this->Stuktur; } |
Administrator
Quellcode |
|
1 2 |
this->Stuktur.Name = new char [128 + 1]; this->Stuktur = new stest [Num]; |
Quellcode |
|
1 |
delete[] this->Stuktur.Name; |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
struct sEntry { char* to; char* from; }; class CopyList { private: UINT Entries; UINT MaxEntries; sEntry *CopyEntries; public: CopyList(); CopyList(UINT MaxEntries); ~CopyList(); void Alloc(UINT MaxEntries); void AddEntry(char* from, char* to); isResult Copy(UINT Number); void GetCopyParameters(); inline UINT GetEntries() { return this->Entries; } inline UINT GetMaxEntries() { return this->MaxEntries; } }; |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
CopyList::CopyList(UINT MaxEntries) { this->Entries = 0; this->MaxEntries = MaxEntries; this->CopyEntries = new sEntry [MaxEntries + 1]; IS_INFO_MSG("[<i>Klassen</i>] CCopyList erstellt [<i>Initialisierung komplett</i>]"); } CopyList::~CopyList() { IS_INFO_MSG("[<i>Klassen</i>] CCopyList reinitialisiert"); for(UINT uiEntry = 0; uiEntry < this->Entries; uiEntry++) { IS_SAFE_DELETE_ARRAY(this->CopyEntries[uiEntry].from); IS_SAFE_DELETE_ARRAY(this->CopyEntries[uiEntry].to); } IS_SAFE_DELETE_ARRAY(this->CopyEntries); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void CopyList::AddEntry(char* from, char* to) { if(this->MaxEntries <= 0) { return; } if(from == NULL || to == NULL) { return; } if(this->Entries >= this->MaxEntries) { return; } this->CopyEntries[this->Entries].from = new char [strlen(from) + 1]; strcpy(this->CopyEntries[this->Entries].from, from); this->CopyEntries[this->Entries].to = new char [strlen(to) + 1]; strcpy(this->CopyEntries[this->Entries].to, to); this->Entries++; } |
Doch es entsteht eines. Wenn du ein Array, vom Typ "stest", Allokierst, must du auch bei jedem Array-Element "stest::Name" freigeben. Ich empfehle dir einenen Konstruktor und einen Destruktor fuer deine Struktur "stest" zu schreiben, die Speicher fuer die Variabel "stest::Name" reservieren und wieder freigeben.Zitat von »"koschka"«
Hi, ich in allen meinen C/C++ Bücher mal nachgekuckt, aber nirgends hab ich eine eindeutige Antwort zu folgendem Problem gefunden:
Ich hab eine Klasse und eine Struktur, die Struktur besteht aus "Zeigervariblen" z.B.
Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 struct stest { char* Name; UINT Parameter; }; class ctest { private: stest Stuktur; UINT andererparameter; public: //Konstructor ctest(UINT Num); // Destructor ~ctest(); };
muss ich jetzt ctest::Name auch per Speicherbelegung zuweisen --- sicher lich ja oder?
also so:
Quellcode
1 2 3 4 5 6 7 8 ctest::ctest(UINT Num) { this->Stuktur.Name = new char [128 + 1]; this->Stuktur = new stest [Num]; } ctest::~ctest() { delete[] this->Stuktur.Name; delete[] this->Stuktur; }
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
struct stest { char* Name; UINT Parameter; }; class ctest { private: stest* Stuktur; // hier ist der vesgessene Zeiger *schäm* :) UINT andererparameter; public: //Konstructor ctest(UINT Num); // Destructor ~ctest(); }; |
Quellcode |
|
1 2 3 4 5 6 7 8 |
ctest::ctest(UINT Num) { this->Stuktur = new stest [Num]; this->Stuktur.Name = new char [128 + 1]; } ctest::~ctest() { delete[] this->Stuktur.Name; delete[] this->Stuktur; } |
Werbeanzeige