new[] und delete[] Operatoren überladen uns Zahl der Elemente des Arrays speichern
-
Hi, wer kann mir sagen warum folgendes Minimalprogramm nicht funktioniert.
Ich habe die new[] und delete[] Operatoren überladen, um die größe des Arrays am Anfang des allokierten Speichers zu speichern.
Zudem würde ich gerne wissen, ob der size_t Parameter des new[]-Operators nun die zu allokierenden Bytes oder die Zahl der Elemente übergibt?
Denn Anfangs hatte ich folgendes versucht, was aber nicht funktioniert hat:void* operator new[](size_t size) { size_t* ptr = static_cast<size_t*>(malloc(size + sizeof(size_t))); if (ptr == nullptr) { throw std::bad_alloc(); } *ptr = size; return (ptr + sizeof(size_t)); }Danach habe ich es in
void* operator new[](size_t size) { size_t* ptr = static_cast<size_t*>(malloc((size + 1) * sizeof(size_t))); if (ptr == nullptr) { throw std::bad_alloc(); } *ptr = size; return (ptr + sizeof(size_t)); }geändert. Jetzt stürzt es zwar nicht ab, aber der Wert der für die Anzahl der Elemente ausgegeben wird stimmt nicht.
-
Ok hat sich erledigt. Habe mal die Werte an den unterschiedlichen Speicherstellen ausgelesen und bin jetzt selber auf die Lösung gekommen. Da ich die void* Pointer ja bereits in size_t* Pointer gecastet hatte hätte ich diese natürlich nur um +/- 1 inc/decrementieren dürfen anstatt um sizeof(size_t) :).
-
Es gibt nette Klassen wie std::vector.