2015-05-07 4 views
-3
#define NUMBER_OF_INFO 3 

struct info 
{ 
    int name; 
    int age; 
    struct address* addressInfo; 
}; 

struct address 
{ 
    int number; 
    int building; 
}; 

У меня есть выше-структура, и я хочу, чтобы выделить память для массива struct info, а также struct info имеет гибкую память, каждый struct info содержит определенное количество struct address, чтобы сделать его просто в этом случае, предположим, каждый struct info содержит 2 struct address (но не может изменить struct info имеет фиксированное число struct address), то, как выделить память для массива struct info с размером NUMBER_OF_INFO, и каждый struct info содержит 2 struct address, и как освободить память после этого?как динамически выделять память для гибкого массива в C++

ответ

2

Используйте std :: vector и push_back или что-то вставить. Таким образом, вы можете динамически распределять память:

struct info 
    { 
     int name; 
     int age; 
     std::vector<address> addressInfo; 
    }; 
0

Если вы не хотите использовать смарт-указатели, то выделение и удаление может выглядеть

#include <algorithm> 

//... 

info *persons = new info[NUMBER_OF_INFO]; 

std::for_each(persons, persons + NUMBER_OF_INFO, 
       [](info &p) { p.addressInfo = new address[2]; }); 

//... 

std::for_each(persons, persons + NUMBER_OF_INFO, 
       [](info &p) { delete [] p.addressInfo }); 
delete [] persons; 

Если ваш компилятор поддерживает новый C++ Standard, то вы можете использовать инициализатор с оператором нового, как, например,

info *persons = new info[NUMBER_OF_INFO] {}; 
Смежные вопросы