Speicherzugriffsfehler



  • Hallo zusammen,

    ich hoffe, ich habe dieses Problem in keinem anderem Beitrag übersehen...

    Ich habe folgendes Programm:

    int* index = (int*)malloc(sizeof(int)*19000*19000);
    index[0] = 0;
    

    und bekomme bei Ausführen folgende Fehlermeldung:

    Unbehandelte Ausnahme bei 0x008613cb in PQTests.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00000000.

    Der Fehler läßt sich nicht eindeutig reproduzieren. Manchmal klappts mit 19000 dann aber nicht mit 20000. Mache ich etwas beim Speicherreservieren falsch?

    Viele Grüße und Danke für die Mühe



  • Du reservierst über 1GB an Speicher am Stück. Kann gut sein dass das mal nicht frei ist. Deshalb: Rückgabewert von malloc prüfen.


  • Mod

    Prüfe den Rückgabewert von malloc. Sieht so aus, als würdest du nämlich eine 0 bekommen.



  • Du reservierst schon eine Menge speicher 19000*19000 * 4 byte sind 1.44 GB hast du soviel Speicher?



  • Daran liegts. Ich muss aber eine Matrix mit einer Größe von bis zu 400000*400000 Einträgen speichern, gibts da elternativwege?



  • theBigJimmy schrieb:

    Daran liegts. Ich muss aber eine Matrix mit einer Größe von bis zu 400000*400000 Einträgen speichern, gibts da elternativwege?

    Klar. Du brauchst zwar 400000*400000 Einträge aber die müssen ja nicht am Stück liegen. Du könntest zB 400000 mal 400000 Einträge am Stück reservieren. Oder ähnliches.

    uU ist es auch nicht notwendig alles immer im RAM zu halten und man kann es auslagern, etc. Je nach Hardware halt.

    Aber mehrere GB an Speicher am Stück ist halt rar - da muss man aufsplitten.



  • Je nachdem, was genau Du vor hast, kannst Du die Daten auch in Blöcken verarbeiten.
    Also quasi Block in Speicher holen -> verarbeiten -> wegspeichern -> usw.



  • ... ja, das macht Sinn. Bei einer Matrix von 400000^2 Einträgen bräuchte ich für int Einträge 640 GB. Zusätzlich habe ich gesehen, dass mein größter Datensatz eine Matrix von 5000000^2 Einträgen verursachen würde...

    Da muss ich mir wohl was einfallen lassen...

    Danke für die Hilfe. Falls ich weiter Fragen habe, werde ich mich noch mal melden.

    Viele Grüße und danke für die Mühe



  • vielleicht solltest du auf geeignete Klassen ausweichen ... WENN du Matrizen der Größenordnung brauchst SOLLTEN die wohl sparse sein ... sonst dauert wasauchimmer du damit machst ja Jahre ... also auf und ne matrixbib die sparse kann suchen ... die ist dann entsprechend optimiert und braucht VIEEEEEEEEEEEEEEEEEL weniger Speicher - meist bietet sie auch noch nette Methoden an die Matrixoperatoren für sparse matrizen optimiert berechnen können .....



  • leider sind die Matrizen nicht sparse. Es handelt sich um Punkte im R^3. Unter anderem benötige ich eine Distanzmatrix...



  • theBigJimmy schrieb:

    leider sind die Matrizen nicht sparse. Es handelt sich um Punkte im R^3. Unter anderem benötige ich eine Distanzmatrix...

    Und wahrscheinlich moechtest du ein Problem loesen, dass besser ohne Matrizen zu loesen ist. Bei Punkten im Raum gibt es viel speicherschonendere Loesungen, konkretes haengt von deinem aktuellen Problem ab.


Log in to reply