你只分配的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
理想的解決方案可能是一個'的std ::矢量- '或'STD: :vector
>'。 –
chris