-4
前の配列がいっぱいであれば、新しい動的配列を再割り当てする関数を作成しています。しかし、私がそれをコンパイルすると、実行時エラーが発生します。 Visual Studio 2015でデバッグすると、関数の実行後にコンパイラがダイナミック配列にアクセスできないか、配列が削除されたように見えます。なぜか教えてくれますか?関数内の動的配列を宣言する
void reallocateMemory(string* arr, int& physicalSize, int addedMemory) {
string* result = new string[physicalSize + addedMemory];
for (int i = 0; i < physicalSize; i++) {
result[i] = arr[i];
}
delete[] arr;
arr = result; // After this code, it seems variable arr works well.
result = nullptr;
physicalSize += addedMemory;
} // However, when the function returns, arr cannot access a dynamic array.
'arr = result'はローカル変数' arr'にのみ割り当てます。呼び出し元は更新されたポインタを取得しません。 – user2357112
'std :: vector'などを使わないのはなぜですか? – user2357112
@ user2357112のコメントには、 'string *&'( 'string'へのポインタへの参照)が必要です。しかし、実際には 'std :: vector'を使用してください。 –