동적 배열의 크기를 변경하고 사용자가 즉시 채울 수있는 함수를 작성하려고했습니다. 나는 "realloc을"의 사용에 그것을해야한다고 알고있다 (그래서 나는했고, 그래서 ... 작동)하지만 내 첫 번째 시도는 다음과 같이 보았다 : 함수 본문에서malloc 및 memcpy를 사용하여 동적으로 배열 크기를 변경하는 C
void ChangeDynamicArraySize(int* dArray, int oldSize, int newSize){
int* tempArray = (int*) malloc(sizeof(int) * oldSize);
CopyArray(tempArray, dArray, oldSize);
free(dArray);
dArray = (int*) malloc(sizeof(int) * newSize);
CopyArray(dArray, tempArray, oldSize);
for (int i = oldSize; i < newSize; i++){
scanf("%i", &dArray[i]);
}
PrintArray(dArray, newSize);
free(tempArray);
}
"PrintArray (dArray, newSize와) ; " 올바른 일. 메인에서 호출 할 때 는하지만()는 같은 결과를 제공합니다 - 17891602 - 17891602 - 17891602 - 17891602
dArray가 해제 된 같은 보이는 ...? 하지만 할당 된 기억이 기능을 종료 한 후에 자동으로 해제되지는 않습니다.
그렇다면 이유가 무엇일까요?
A입니다. CopyArray는 memcpy()의 버전입니다. – WJuz
'dArray'가 값으로 전달되고 사용자는 로컬 복사본 만 변경합니다. – deniss