Вы выделяющий только массив указателей 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;
I Общие для 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
Идеальное решение, вероятно, является 'станд :: вектор- ' или 'станд: : vector
> '. –
chris