malloc - Errorcode: 998 Invalid access to memory location



  • Hi!

    Sorry, ich war mal wieder mit der Frage überfordert, in welches Forum ich das hier posten soll. Einfach verschieben.

    Also mein Problem ist ganz einfach gesagt aber schwer(?) zu beantworten.

    Ich versuche in meinem Programm mit malloc einen Speicherbereich zu reservieren, der grade mal 64kb groß ist. Jedoch bekomme ich nur einen NULL Pointer zurück und mit GetLastError bekomme ich eine 998 (Invalid access to memory location) zurück.

    Da ich bislang noch nie ein Problem beim reservieren von Speicher hatte, bin ich derzeit echt überfragt.

    Die Zeile sieht nicht sonderlich anders aus als:
    unsigned char *pTable = (unsigned char*)malloc( 0x10000 );

    und zum Zeitpunkt des Aufrufes sind auch "grade mal" 6 MB speicher belegt - also noch lange kein Grund abzustürzen.

    Hat jemand eine Idee wie ich das Problem lösen könnte?

    MfG
    ~Eich



  • Steht da wirklich 0x10000 (=0) oder soetwas wie sizeof(int)*10000?

    Dann könnte es nämlich sein, dass nicht genug Speicher vorhanden ist (den Heap Speicher kann man irgendwo einstellen).

    Sonst weiß ich auch nich, was es sein könnte...



  • Phoemuex schrieb:

    Dann könnte es nämlich sein, dass nicht genug Speicher vorhanden ist (den Heap Speicher kann man irgendwo einstellen).

    du verwechselst da was. heap ist in rohen mengen verfuegbar.



  • naja, in Wirklichkeit steht da

    unsigned char *pTable = (unsigned char*)malloc( uSizeOf );

    wobei uSizeOf den Wert: 0x000174F9 beinhaltet. (sind sogar 94kB 😉 )

    Aber das sollte ja eigentlich auch klappen 😞
    Ich kann es höchstens mal mit einem anderen Compiler ausprobieren, wobei ich eigentlich nicht davon ausgehe, dass es im MSVC ein Fehler ist im Moment, sondern, dass es wohl irgendwie an mir liegen muss.



  • an einer codezeile kann man keine diagnosen machen.



  • Ich kann gerne den gesamten Quellcode hochladen, aber es geht dann schon eher in WinAPI rein und außerdem dürfte es so und so bei niemandem wirklich funktionieren, weil er halt eine bestimmte Partition mit dem Typen 0x20 am Anfang einer Extended Partition braucht.

    Aber ich lade es nachher mal hoch *grad in der Schule ist*



  • du sollst uns nicht mit deinem code erschlagen, du sollst eine minimalistische demonstration des fehlers darbieten.
    "wie laesst sich der fehler reproduzieren?"

    /me oO( ernsthaft, supportmenschen werden viel zu mies bezahlt... )



  • Es kann gut sein, dass du ein Stück vorher den Heap zerschießt, indem du z.B. über eine Arraygrenze hinaus schreibst oder einen ungültigen Pointer dereferenzierst.


Anmelden zum Antworten