_aligned_free() - Damage before 0x005bf250 which was allokated by aligned routine



  • In meiner Engine Allokiere ich im Konstruktor der klasse: EntityRenderData einen XMMATRIX Dynamisch auf den heap:

    EntityRenderData::EntityRenderData()
    {
    	pWorld=(XMMATRIX*)_aligned_malloc(sizeof(XMMATRIX),__alignof(XMMATRIX));
    	ZeroMemory(pWorld,sizeof(XMMATRIX));
    }
    

    das tue ich damit pWorld seine Ausrichtung nicht verliert, da EntityRenderData selbst via new auf dem heap Allokiert ist und XMMATRIX ja 16 byte ausgerichtet ist - hab ich gelesen hab aber noch nicht so richtig verstanden was das bedeutet 😃 😕
    also währe erstmal schön wenn mir jemand nochmal erklären was genau das bedeutet?
    Also das Allokieren klappt auch problemlos! aber das Freigeben macht mir Probleme ... Der Code dazu sieht so aus:

    _aligned_free(pWorld);
    

    Wenn mein Programm nun bei der Freigabe des Pointers ankommt, erhalte ich allerdings folgende Fehlermeldung:

    Damage before 0x005bf250 which was allokated by aligned routine
    

    Also währe echt schön wenn mir jemand erklären könnte, was genau eine 16 byte Ausrichtung ist ... und vor allem wo ich den Fehler mache, das ich meinen Pointer nicht wieder Freigeben kann! 🙄
    oder liegt es daran dass EntityRenderData wie gesagt selbst allokiert und nicht ausgerichtet ist? Müsste ich also wirklich meine World Matrices Extern Unterbringen?

    LG und vielen dank im vor raus für eure Hilfe! 🙂



  • Mit dem Code leider nicht nachstellbar. Siehe auch Links in meiner Signatur...



  • Du schreibst wahrscheinlich irgendwo über eine Arraygrenze hinweg und zerschießt dir damit den Heap.

    Also währe echt schön wenn mir jemand erklären könnte, was genau eine 16 byte Ausrichtung ist

    Eine durch 16 teilbare Adresse.



  • Die Lösung ist mir bisschen peinlich ... ^^
    mit der dem Pointer ist alles in Ordnung, aber ich hatte Folgendes gemacht:

    pWorld = &XMMatrixIdentity();
    

    ... *facepalm* wie auch immer ich auf die idee geommen bin das da ein '&' hingehöht 😮 ... jedenfalls Zeigt pWorld natürlich hinterher irgentwo hin, nur nicht auf den Allokierten Speicherbereich ... 😃 wodurch natürlich klar ist das das freigeben nicht klappt ... manchmal Zweifel ich echt an mir 😃 ich dachte eigentlich ich beherrsche die Grundlagen... 🙄

    LG und trotzdem danke. SK 👍



  • SKVG schrieb:

    mit der dem Pointer ist alles in Ordnung, aber ich hatte Folgendes gemacht:

    pWorld = &XMMatrixIdentity();
    

    ... *facepalm* wie auch immer ich auf die idee geommen bin das da ein '&' hingehöht 😮 ... jedenfalls Zeigt pWorld natürlich hinterher irgentwo hin, nur nicht auf den Allokierten Speicherbereich ... 😃

    Ist pWorld ein void-Pointer? Eine andere Möglichkeit gibt es nicht, bei der
    pWorld = XMMatrixIdentity()
    und
    pWorld = &XMMatrixIdentity()
    beide ohne Murren durch den Compiler gehen. Dann wiederum ist es aber unlogisch, dass du die Rückgabe von _aligned_malloc nach XMMAtrix* castest. 😕



  • nein, pWorld ist ein XMMATRIX* Pointer. Ich habe das Ganze jetzt so gelöst:

    *pWorld = XMMatrixIdentity();
    
    pWorld = XMMatrixIdentity();
    

    - klappt natürlich nicht, da XMMatrixIdentity(); ja keinen Pointer zurückgibt...

    pWorld = &XMMatrixIdentity();
    

    - geht natürlich durch, denn es entsteht ja eine Reference auf die Rückgabe von XMMatrixIdentity(); ... was natürlich total sinnvoll ist *hust* ... 😃

    Was mich eigentlich verwirrt hat, war die Fehlermeldung, da ich eigentlich noch nie damit gearbeitet habe sondern immer mit new/delete. Womit ich ja leider keine Ausgerichtete Allokation vornehmen kann oder? zm. nicht ohne mir selber einen operator zu basteln... 😃

    LG SK



  • Autsch, das klingt nach ein paar new s zu viel und drei-Sterne-Programmierung...


Anmelden zum Antworten