Speicherlimit?



  • Hi... Ich habe ein Datenfeld (unsigned char) mit ~2mio Einträgen und leider bricht das Programm ab einer bestimmten anzahl von Einträgen sofort beim starten ab (Zugriffsfehler).

    Ich nutze dev-cpp mit gcc.
    Genug ram hab ich schon 😉 2 mb sind doch nix...

    Was kann ich da machen?

    Besten Dank im vorraus.



  • Vielleicht schreibst du über die Grenzen des Arrays hinaus?



  • Nein... Wenn ich das programm nur auf die array definition reduziere kommt auch der Fehler.

    unsigned char binary_list[2180960];
    


  • Solltest das Array eventuell nicht auf dem Stack anlegen, sondern auf dem Heap.

    unsigned char *binary_list;
    binary_list = calloc(2180960, sizeof(unsigned char));
    

    [edit]fehler ausgebessert[/edit]



  • binary_list = calloc(2180960, sizeof(*binary_list) );

    bye

    tt



  • DANKE! Das funzt...
    Kann mur nur einer kurz erklären was das genau macht?
    Also calloc reserviert einfach arg1 * arg2 bytes im speicher udn gibt die adresse des ersten bytes zurück?

    MfG
    Zulan



  • ja so kannst du das sehen, genauer wäre es zu sagen calloc allokiert x objekte der größe n,calloc initialisiert weiterhin noch alle bits mit 0 wobei jetzt noch angemerkt werden muss, das diese initialisierung weder der darstellung der integer 0, der floating point 0 oder einer null pointer konstanten entsprechen muss...

    dh. du kannst auch malloc verwenden und den speicher per hand auf 0 initialisieren wenn es notwendig sein sollte 🙂

    bye

    tt


Anmelden zum Antworten