Я хотел написать функцию, которая изменяет размер динамического массива и позволяет пользователю заполнить его сразу. Я знаю, что я должен делать это с использованием «перераспределить» (так что я сделал, и поэтому он работает ...), но моя первая попытка выглядела так:С динамическим изменением размера массива с использованием malloc и memcpy
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 был освобожден ...? Но поскольку я знаю, что выделенная memmory не автоматически освобождается после выхода из функции.
Тогда что может быть причиной?
A, и CopyArray - это только моя версия memcpy() – WJuz
'dArray' передается по значению, и вы меняете только свою локальную копию. – deniss