2017-11-02 4 views
-1

私はこのコードポインタの配列を宣言し、位置5の値を割り当てるを有するものと配列の点で最初のポインタ:私はポインタの配列を持っています。配列の各要素が指す位置に値を正しく割り当てる方法は?

int *p[10]; 
*p[0]=5; 

しかし、これはEXC_BAD_ACCESSエラーを示しています。試しました

int **p = new int *[10]; 
*p[0]=5; 

しかし、これは同じエラーが発生しています。ポインタの配列の要素が指し示す位置にどのように値を割り当てるのですか?ありがとうございました。

+1

'p [0]'にメモリを与える必要があります。 – DimChtz

+0

'int'へのポインタの配列を割り当てましたが' int'sはありません。これらのポインタを何かを指すように初期化していません。これは 'int * p;と書いたのと同じです。 * p = 5; '。 –

+0

1)ポインタの配列が必要なのはなぜですか? 2) '* p [0]' UBに至る初期化されていないポインタをデリファレンスします。逆参照する前に、そのポインタをメモリに割り当てます。 –

答えて

2

配列内の最初のポインタを参照解除する前に、有効なメモリ位置を指すように初期化する必要があります。たとえば、次のようなレベルでの手動のメモリ割り当ては、学習運動として、またはより大きな構造の実装の一部として以外に、あなたは使用に望むものをほぼ確実ではないことを

int *p[10]; 
p[0] = new int; 
*p[0] = 5; 

注意。あなたが実際にポインタを通じて10個の整数、およびそれのアクセス部分の配列にしたい場合は、このようにそれを行うことができます:あなたがstd::unique_ptrstd::shared_ptrに見て、ポインタの配列を必要とした場合は

int array[10];    // allocate room for ten integers 
array[0] = 5;    // initialize the first one 
int *first = &array[0]; // get a pointer to the first one 
assert(*first == 5);  // work with the pointer 

例外の場合に早期返品または忘れたdeleteのデータが漏れていないことを確認してください。

関連する問題