のポインターの配列のみitem *
を割り当てているため、それぞれにもメモリを割り当てる必要があります。item
たとえば、次のようになります。
struct item // naming it 'items' might be confusing, and was used inconsistently
// in your code sample
{
int member1;
int member2;
};
int N=5;
item **ptr=new item *[N];
for(int i = 0; i < N; ++i)
{
ptr[i] = new item();
}
構造体メンバーへのアクセスは次のようになります。
ptr[2]->member1 = 42; // Sets member1 of the 3rd item element to 42
次のように、割り当てられたメモリをどこかで解放する必要があることに注意してください。
for(int i = 0; i < N; ++i)
{
delete ptr[i];
}
delete [] ptr;
私は一般的にC++の場合、次のようなC++標準コンテナを使用する方がよいでしょう:
#include <vector>
int N = 5;
std::vector<item> myItems;
myItems.resize(N,item());
myItems[2].member1 = 42; // Sets member1 of the 3rd item element to 42
これにより、内部ですべてのメモリ管理が行われます。C++11
を使用していて、動的にサイズ変更された配列が必要ない場合は、以下を使用してヒープ割り当てメモリをまったく回避することもできます。std::array
#include <array>
std::array<item,5> myItems; // Size is fixed to 5, you can't use a variable here
myItems[2].member1 = 42; // Sets member1 of the 3rd item element to 42