Я имею структуру, которая включает в себя множество других структур:Динамический элемент массива вложенной структуры
typedef struct{
int cell_Type; //user association: 0--> Macro 1--> Femto
int cell_ID; //cell ID that the user is associated with
}association;
//User struct
typedef struct{
coord c; //coordinates
association id; //association parameters
capacity cap; //capacity parameters
}usu;
//Struct with a vector of users
typedef struct{
usu user[NUM_USERS+NUM_HS]; //each user is defined by the association (id), etc...
}vectusers;
void main(int argc,char *argv[])
{
//.....
//memory allocation for the structures
users_ptr=calloc(1,sizeof(vectusers)); //users pointer
//.....
}
До сих пор так хорошо, до этого момента, что было необходимо для массива, который я не будет знать его размер, пока программа почти не закончится.
Таким образом, структура будет:
typedef struct{
int cell_Type; //user association: 0--> Macro 1--> Femto
int cell_ID; //cell ID that the user is associated with
int assigned_RBs; //counter of how many resources have been assigned
int *RB_number; //array with size according to assigned_RBs counter
}association;
Моя проблема с таНос() и перераспределить(). На самом деле я думаю, что я резервирование правильно памяти с таНосом:
users_ptr->user[u].id.RB_number = malloc(1*sizeof(int));
, но когда дело доходит до перераспределить(), я не изменить размер массива:
users_ptr->user[index_max_W].id.assigned_RBs++;
size = users_ptr->user[index_max_W].id.assigned_RBs;
users_ptr->user[index_max_W].id.RB_number = realloc((users_ptr->user[index_max_W].id.RB_number),size);
где index_max_w является индекс пользователя с максимальным значением статистики. Оба размера и index_max_W были объявлены как int.
Может кто-нибудь, пожалуйста, помогите мне с realoc в этом случае?
Непонятно, в чем дело. Что вы подразумеваете под «но когда дело доходит до realloc(), я не изменяю размер массива:« – hivert
В начале массив имеет только одну запись, которая будет [0]. После некоторого выполнения я хочу, чтобы в третьем примере было больше записей, согласно некоторым статистическим данным. Это будет изменение в соответствии с assigne_RBs. – kat
Если этот код должен компилироваться и запускаться в среде размещения (такой как Windows, Linux, телефоны и т. Д.), Тогда main должен возвращать 'int'. – Lundin