Hello,
I want to create an array of structures wherein the array is dynamic. Inside the parent structure, there is another array of structures which is also dynamic. I am not able to resolve some issues while trying to compile it...Kindly help me out.
Firstly, i have the code below showing the structure details
Code:
typedef struct
{
uint8_t dlmAcid;
uint8_t dlmHarqEBCount;
uint8_t dlmAisn;
} STRUCTPAD DlmAcidInfo_t;
typedef struct
{
uint8_t cidInMap;
uint8_t mapharqFlag;
uint8_t noOfEBs;
uint8_t mcsNo;
uint8_t mapharqMode;
uint8_t ackchAlloc;
uint8_t mapAcidCount;
DlmAcidInfo_t DlmAcid;
} STRUCTPAD CidInfoInMap_t;
typedef struct
{
uint8_t noOfCids;
CidInfoInMap_t cidInfoInMap;
} STRUCTPAD ZoneInfoInMap_t;
typedef struct
{
uint8_t dlFrameNo;
ZoneInfoInMap_t zoneInfoInMap;
} STRUCTPAD HARQAckInfo_t;
Here is my code, i have written. It incomplete as i am yet to free the memory.
Code:
#include<stdio.h>
#include<stdint.h>
#define STRUCTPAD __attribute__((__packed__))
typedef struct
{
uint8_t dlmAcid;
uint8_t dlmHarqEBCount;
uint8_t dlmAisn;
} STRUCTPAD DlmAcidInfo_t;
typedef struct
{
uint8_t cidInMap;
uint8_t mapharqFlag;
uint8_t noOfEBs;
uint8_t mcsNo;
uint8_t mapharqMode;
uint8_t ackchAlloc;
uint8_t mapAcidCount;
DlmAcidInfo_t DlmAcid;
} STRUCTPAD CidInfoInMap_t;
typedef struct
{
uint8_t noOfCids;
CidInfoInMap_t cidInfoInMap;
} STRUCTPAD ZoneInfoInMap_t;
typedef struct
{
uint8_t dlFrameNo;
ZoneInfoInMap_t zoneInfoInMap;
} STRUCTPAD HARQAckInfo_t;
int main()
{
int q,z,x,a;
int noOfZones =2;
#if 0
HARQAckInfo_t temp;
HARQAckInfo_t *harqInfo;
harqInfo = &temp;
#endif
HARQAckInfo_t **harqInfo = NULL;
ZoneInfoInMap_t **zoneInfoInMap = NULL;
CidInfoInMap_t **cidInfoInMap = NULL;
DlmAcidInfo_t **DlmAcid = NULL;
for(q=0; q<1; q++)
{
harqInfo = (HARQAckInfo_t**)realloc(harqInfo, (q+1)*sizeof(HARQAckInfo_t*));
harqInfo[q]= (HARQAckInfo_t*)malloc(sizeof(HARQAckInfo_t));
/*Begin filling HARQAckInfo_t based on no. of zones which you can know dynamically */
harqInfo[q]->dlFrameNo = 100;
for(z=0; z<noOfZones; z++)
{
harqInfo[q]->zoneInfoInMap = (ZoneInfoInMap_t**)realloc(harqInfo[q]->zoneInfoInMap,(z+1)*sizeof(ZoneInfoInMap_t*));
harqInfo[q]->zoneInfoInMap[z] = (ZoneInfoInMap_t*)malloc(sizeof(ZoneInfoInMap_t));
harqInfo[q]->zoneInfoInMap[z]->noOfCids = 50;
for(x =0; x<harqInfo[q]->zoneInfoInMap[z]->noOfCids; x++)
{
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap = (CidInfoInMap_t**)realloc(harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap,(x+1)*sizeof(CidInfoInMap_t*));
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x] = (CidInfoInMap_t*)malloc(sizeof(CidInfoInMap_t));
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->cidInMap = 5;
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->mapharqFlag = 1;
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->noOfEBs = 5;
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->mcsNo = 4;
if(harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->mapharqFlag ==1)
{
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->mapharqMode = 0;
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->ackchAlloc = 0;
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->mapAcidCount = 20;
for(a=0; a<harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->mapAcidCount; a++)
{
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->DlmAcid = (DlmAcidInfo_t**)realloc(harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->DlmAcid,(a+1)*sizeof(DlmAcidInfo_t*));
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->DlmAcid[a] = (DlmAcidInfo_t*)malloc(sizeof(DlmAcidInfo_t));
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->DlmAcid[a]->dlmAcid = 5;
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->DlmAcid[a]->dlmHarqEBCount = 5;
harqInfo[q]->zoneInfoInMap[z]->cidInfoInMap[x]->DlmAcid[a]->dlmAisn = 1;
}
}
}
}
}
}
I am getting various warnings and errors as i am sure that i have done mistakes in declaring structures and assigning memory to it.Kindly see these errors after compilation
Code:
gcc dyn.c
dyn.c: In function `main':
dyn.c:52: warning: cast to pointer from integer of different size
dyn.c:58: warning: cast to pointer from integer of different size
dyn.c:58: error: incompatible types in assignment
dyn.c:59: error: subscripted value is neither array nor pointer
dyn.c:60: error: subscripted value is neither array nor pointer
dyn.c:61: error: subscripted value is neither array nor pointer
dyn.c:63: error: subscripted value is neither array nor pointer
dyn.c:63: error: subscripted value is neither array nor pointer
dyn.c:63: warning: cast to pointer from integer of different size
dyn.c:64: error: subscripted value is neither array nor pointer
dyn.c:65: error: subscripted value is neither array nor pointer
dyn.c:66: error: subscripted value is neither array nor pointer
dyn.c:67: error: subscripted value is neither array nor pointer
dyn.c:68: error: subscripted value is neither array nor pointer
dyn.c:69: error: subscripted value is neither array nor pointer
dyn.c:71: error: subscripted value is neither array nor pointer
dyn.c:72: error: subscripted value is neither array nor pointer
dyn.c:73: error: subscripted value is neither array nor pointer
dyn.c:74: error: subscripted value is neither array nor pointer
dyn.c:76: error: subscripted value is neither array nor pointer
dyn.c:76: error: subscripted value is neither array nor pointer
dyn.c:76: warning: cast to pointer from integer of different size
dyn.c:77: error: subscripted value is neither array nor pointer
dyn.c:78: error: subscripted value is neither array nor pointer
dyn.c:79: error: subscripted value is neither array nor pointer
dyn.c:80: error: subscripted value is neither array nor pointer
Note: All the RValues (constants) assigned in the code are just for testing purposes.. these values are known dynamically when run on real time.
Kindly please help me out :-|
Thanks in advance.
Btw, i referred this here as an example to implement this