私はmain関数で2つの動的配列を作成しました。私は両方の関数を参照によって関数に渡しました。次に、小さなダイナミックアレイから大きなダイナミックアレイにデータをコピーします。小さなダイナミック配列を削除します。大きなダイナミックアレイのアドレスを小さなダイナミックアレイに割り当てます。今度は理想的にはarr配列のサイズは10でなければなりません。しかし、配列の6番目の要素をメインに印刷しようとするとクラッシュします。以下のコードを見てください:動的配列が関数に渡される
#include <iostream>
#include <string>
using namespace std;
void func(string * arr, string * brr);
int main()
{
string* arr = new string[5];
arr[0] = "hello0";
arr[1] = "hello1";
arr[2] = "hello2";
arr[3] = "hello3";
arr[4] = "hello4";
string* brr = new string[10];
func(arr, brr);
for(int i = 0; i < 6; i++)
cout << arr[i] << endl;
return 0;
}
void func(string * arr, string * brr)
{
for(int i = 0; i < 5; i++)
brr[i] = arr[i];
for(i = 0; i < 5; i++)
cout << brr[i] << endl;
delete []arr;
arr = brr;
arr[5] = "hello5";
}
それがすべてではない嫌なのですが、あなたがしたい場合は、ポインタへの参照を使用することができるため、このシグネチャます:void funcを(文字列*&編曲、文字列* BRR) – Asaf
@ Asaf私はC++を少ししか知っていませんが、私はいつも慣用的なC++がポインタを避けると考えていました。しかし、良い提案。 – cnicutar
[これに関する良い記事](http://www.codeproject.com/Articles/4894/Pointer-to-Pointer-and-Reference-to-Pointer) – Samulk