realloc
-
Und die Zeile
*(ilist+count -1)=i;kann man auch so schreiben:ilist[count-1] = i;. Und zur Erinnerung, die Elemente in einem Array kann man immer vonarr[0]..arr[count-1]ansprechen
edit: Richtig, ghorst hat Recht! Indem Beispiel-Code im ersten Post ist das letzte Element natürlich arr[count], weil der Speicher dort ja schon vergrößert wurde, count aber noch nicht erhöht wurde.
-
das mit dem letzten element trifft hier aber nicht zu, da die größe count+1 ist und somit array[count] das letzte element wäre.
-
p=realloc(p,...)ist auch so ein Anti-Pattern eigener Art...
Eines der Schlimmeren, weil es so unschuldig aussieht.
-
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
