realloc



  • Jetzt muß man nur noch hoffen, daß ein Byte groß genug ist, um einen kompletten int-Wert zu fassen 😉 ('count+1' Integers sind idR etwas größer als die 'count+1' Byte, die mit realloc() angefordert wurden)



  • @CStoll stimmt du hast recht. ich war irgendwie darauf fixziert, dass es ein char-array sein müsste, da sonst der aufruf von realloc mit count+1 keinerlei sinn machen würde.



  • neuer Versuch...

    ilist=(* int) realloc(ilist,count +1);//Typecast, Rückgabetyp int-Zeiger
    
    *(ilist+count -1)=i;
    

    Speicherbereich wird um int 1 erhöht
    und anschließend wird in den vorletzten Speicherbereich der übergebene Wert i eingetragen.
    Hoffe, dass ich es jetzt verstanden habe.



  • Der Cast ist immer noch falsch (Tip: Wie schreibt man den Typ "Zeiger auf int"?) - und die Größe des angeforderten Speichers ist immer noch zu klein (sizeof() hilft).

    btw, der Zugriff auf das letzte Element war schon vorher (relativ) richtig.



  • CStoll schrieb:

    und die Größe des angeforderten Speichers ist immer noch zu klein (sizeof() hilft).

    Um es ein wenig deutlicher zu machen (CStoll spielt gern Geheimniskrämer :p), malloc bzw realloc holen dir Speicher mit so vielen Bytes wie du angibst. Hier wird angegeben, dass count+1 Bytes geholt werden sollen. Da ein int aber größer als ein Byte ist, ist es zuwenig Speicher. sizeof(int) gibt zurück, wieviele Bytes ein int groß ist 🙂



  • Danke für die Hilfe, bin wohl ein ziemlich schwieriger Fall.

    ilist=(int*) realloc(ilist,count+sizeof(int));
    


  • In der Tat, wenn 1 int sizeof(int) Bytes belegt, wieviele Bytes belegen dann n ints? Doch nicht sizeof(int)+n !



  • mila schrieb:

    Danke für die Hilfe, bin wohl ein ziemlich schwieriger Fall.

    ilist=(int*) realloc(ilist,count+sizeof(int));
    

    Nö, du kannst bloss anscheinend weder gut rechnen noch programmieren.
    Lern doch zusammen mit nem Schul-/Studienkollegen, das geht viel schneller, besser, effektiver als hier über ein Forum.



  • mila schrieb:

    Danke für die Hilfe, bin wohl ein ziemlich schwieriger Fall.

    ilist=(int*) realloc(ilist,count+sizeof(int));
    

    scheint so, 😉 ich denke du willst das:

    realloc(ilist,count[u]*[/u]sizeof(int))
    

    ausserdem: beachte auch campers posting. realloc kann schief gehen und dann ist dein pointer futsch.
    🙂



  • Im Zusammenhang muss es dann natürlich (count+1)*sizeof(int) heißen 🙂


Anmelden zum Antworten