ダイナミック配列のサイズを変更し、一度にそれを埋めることができる関数を書こうと思っていました。私は(...ので、私がやったので、それが動作します)私は、「reallocの」を使用してそれを行う必要があることを知っているが、私の最初の試みは、このように見えた:関数本体「プリントアレイ(dArray、NewSizeパラメータ)で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);
}
; "正しい。メインから呼び出された場合 は、しかし、()、それは次のような結果を与える: - 17891602 - 17891602 - 17891602 - 17891602
dArrayが解放されたようなので、それが見えますか...?しかし、私は割り当てられたmemmoryが自動的に関数を終了した後に解放されないことを知っている。
次に、理由は何でしょうか?
A CopyArrayはmemcpyのちょうど私のバージョンです – WJuz
'dArray'は値渡しで、ローカルコピーを変更しています。 – deniss