2017-04-07 1 views
3

Sag ich habe eine array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} deklariert. Später möchte ich es array[8] = {2, 3, 4, 5, 6, 7, 8, 9} sein.Kann ich von einer Position des Arrays realloc?

Die ersten 2 Elemente ablehnen. So würde es auf array[2] beginnen. Reallocing array zu array[2].

Ich habe versucht:

int *array=(int*)malloc(10*sizeof(int)); 
...//do stuffs 
array=(int*)realloc(array[2],8*sizeof(int)); 

Es hat nicht funktioniert. Verwenden Sie weder &array[2], *array[2], noch erstellen Sie ein Hilfs-Array, und ordnen Sie Array zu AuxArr neu zu als Free (AuxArr).

Kann ich ein Licht bekommen?

Antwort

6

Sie können nur einen Zeiger auf einen Speicherblock neu zuweisen, der bereits zugewiesen wurde. Sie können also realloc (array), aber nicht array [2] verwenden, da dies ein Zeiger auf eine Stelle in der Mitte eines Speicherblocks ist.

Sie können stattdessen memmove versuchen.

Edit: Als Antwort auf ThingyWotsit Kommentar, nach Memomving die Daten, die Sie an der Vorderseite des Arrays, dann können Sie Realloc, um das Ende ablegen.

+0

Memmove! Sollte schon mal darüber nachdenken, danke –

+0

Die Frage ist nicht genau angegeben. Länge. Das Verschieben des ursprünglichen Arrays würde ergeben: {2, 3, 4, 5, 6, 7, 8, 9, 9, 9} – ThingyWotsit

0

Verwenden Sie einfach array += 2 oder array = &array[2]. Sie können nicht es.

+0

In welcher Compiler-Erweiterung ist der Name eines Arrays ein Wert in C? – Gerhardh

+0

Er verwendet ein dynamisch zugewiesenes Array, das nur ein Zeiger mit mehr Platz 'malloc()' ed darüber hinaus ist. –

+0

Sie haben Recht. Ich wurde durch den 'array [10] -Teil abgelenkt. – Gerhardh

Verwandte Themen