2017-04-07 9 views
3

나는 array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}이라고 말합니다. 나중에 나는 그것이 array[8] = {2, 3, 4, 5, 6, 7, 8, 9}이되고 싶다.배열의 위치에서 다시 할당 할 수 있습니까?

첫 번째 두 요소를 닫습니다. 그래서 그것은 array[2]에 시작합니다. arrayarray[2]에 재 할당하십시오.

나는 시도했다 : 그것은 작동하지 않았다

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

. &array[2], *array[2]을 사용하거나 보조 배열을 만들지 말고 Array를 AuxArr에서 Free (AuxArr)로 재 할당하십시오.

불이 들어 오나요?

답변

6

이미 alloc'ed 된 메모리 블록에 대해서만 포인터를 다시 할당 할 수 있습니다. 그래서 당신은 realloc (배열)을 할 수는 있지만 배열 [2]는 메모리 블록의 중간에있는 위치에 대한 포인터이기 때문에 배열 할 수 없습니다.

대신 memmove을 시도해보십시오.

편집 : ThingyWotsit의 의견에 따라 배열의 앞부분에 원하는 데이터를 저장 한 후 다시 꼬리표를 제거 할 수 있습니다.

+0

Memmove! 이전에 그것에 대해 생각해 봤어야했는데, 감사합니다 –

+0

질문은 잘 지정되어 있지 않습니다. 길이. {2, 3, 4, 5, 6, 7, 8, 9, 9, 9} – ThingyWotsit

0

array += 2 또는 array = &array[2] 만 사용하십시오. realloc() 수 없습니다.

+0

컴파일러 확장은 C의 lvalue 배열의 이름입니까? – Gerhardh

+0

그는 동적으로 할당 된 배열을 사용하고 있습니다.이 배열은 그 이상의 공간 인'malloc()'이있는 포인터 일뿐입니다. –

+0

당신 말이 맞아요. 'array [10]'부분에 정신이 산만 해졌다. – Gerhardh