problem mit realloc



  • hi!

    ich hab ein kleines problem mit meinem code und zwar hab ich einen array *arraylist und dieser soll dynamisch erweitert werden...

    #define TPE int
    
    TPE *arrlist;
    int elements;
    
    void initArrlist(){
       elements = 0;
       arrlist = NULL;
       arrlist = (TPE *) malloc(sizeof(TPE));
    }
    
    void addElement(TPE el){
       arrlist[elements] = el;
       arrlist = (TPE *) realloc(arrlist, sizeof(TPE));
       elements++;
    }
    
    ...
    

    dann kann ich 3mal add element aufrufen und beim drittenmal kommt folgende meldung:

    *** glibc detected *** realloc(): invalid next size: 0x0804a008 ***
    

    ich nutze linux mit dem gcc compiler 4.0.3!

    waer schoen waenn jemand wuesste was ich da falsch mache!

    danke mfg... --linuxuser--



  • Du reallokierst immer gleich viel Speicher, genug für ein TPE.



  • Du mußt realloc auch die richtige Größenangabe mit auf den Weg geben - dein Aufruf setzt den Speicher in jeder Runde auf 1*sizeof(int), also rauschst du nahezu sofort in fremde Speicherbereiche.

    Richtig müsste das so aussehen:

    void addElement(TPE el){
       arrlist[elements] = el;
       elements++;
       arrlist = (TPE *) realloc(arrlist, sizeof(TPE)*elements);
    }
    


  • CStoll schrieb:

    Richtig müsste das so aussehen:

    ...
       arrlist = (TPE *) realloc(arrlist, sizeof(TPE)*elements);
    ...
    

    ist immer noch zu wenig
    besser so:

    ...
       arrlist = (TPE *) realloc(arrlist, sizeof(TPE)*(elements+1));
    ...
    


  • hi!

    danke ich habs nun mit eurer hilfe hingebracht!

    mfg --linuxuser--


Anmelden zum Antworten