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
