new[] und delete[] Operatoren überladen uns Zahl der Elemente des Arrays speichern



  • Hi, wer kann mir sagen warum folgendes Minimalprogramm nicht funktioniert.

    https://ideone.com/sfjBMo

    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.


Anmelden zum Antworten