执行错误的访问和嵌套结构
execute bad access and nested structure
我对该程序执行错误访问有任何错误。
- 首先,我有3个结构。
struct format {
int initialCyclicShift;
int nrOfSymbols;
int startingSymbolIndex;
int formatID;
};
struct PUCCH_Resource {
//38.331 maxNrofPUCCH-Resources = 128
int pucch_ResourceId;
int startingPRB;
int intraSLotFrequencyHopping;
int secondHopPRB;
// 5 formats in PUCCH, 38.211. Also in 38.331
struct format (*formatList)[5]; //(*formatList) is a pointer that points to the whole array of size 5. The element of the array is a struct format
};
struct PUCCH_ResourceSet {
// 38.331 maxNrOfPUCCH-ResourceSet=4
int pucch_ResoureSetId;
// 38.331 maxNrofPUCCH-ResourcePerSet = 32; for Initial Access: maxNrofPUCCH-ResourcePerSet = 16. There could be repetition of pucch resource in different sets.
struct PUCCH_Resource (*ResourceList)[32];
};
- 然后我初始化指针,指向父结构 PUCCH_ResourceSet 和子结构。
struct PUCCH_ResourceSet *pucch_ResourceSetPtr = (struct PUCCH_ResourceSet*) malloc (sizeof(struct PUCCH_ResourceSet));
pucch_ResourceSetPtr->ResourceList = malloc(sizeof(struct PUCCH_Resource));
for (int i = 0; i <32; i++){
for (int j = 0; j <5; j++)
pucch_ResourceSetPtr->ResourceList[i]->formatList[j]= malloc(sizeof(struct format));
}
(edit) 我尝试按照下面成员的建议初始化所有结构,但仍然有同样的问题。
- 然后尝试为结构的每个成员赋值的 get 函数,例如:
pucch_ResourceSetPtr->ResourceList[0]->pucch_ResourceId=0;
pucch_ResourceSetPtr->ResourceList[0]->startingPRB = 0;
pucch_ResourceSetPtr->ResourceList[0]->formatList[0]->formatID=0; //this is where I have the error
上面这行代码是第一个给struct的成员赋值;这是我出错的地方。
根据窃听,我看到当 PUCCH_ResourceSet
时,它看到一个内存块被分配给结构,它的子结构,PUCCH_Resource
,而不是它的孙结构,格式如下所示在下面的屏幕截图中。
我怀疑这是问题所在,但不明白为什么没有为格式结构分配内存块。
此外,为了将内存分配给结构成员而对代码进行了一些操作之后,我在格式结构上遇到构建错误:
有人知道这种行为的原因以及我该如何解决吗?
首先在嵌套结构中,我必须为结构分配内存。
结构中存在多个问题,导致我分配内存的方式出现问题。例如,我使用指向任何数组的指针而不是指针数组。
struct format (*formatList)[5]; //this is no array of pointer but a pointer to the beginning of an array.
我应该使用:
`struct format *formatList[5];`
因此,我无法在第 1 步中正确分配内存。
声明结构的合适代码如下。
struct PUCCH_ResourceSet *pucch_ResourceSetPtr = (struct PUCCH_ResourceSet*) malloc (sizeof(struct PUCCH_ResourceSet));
printf("%d", sizeof(struct PUCCH_Resource*));
for (int i = 0; i <32; i++){
pucch_ResourceSetPtr->ResourceList[i] = malloc(sizeof(struct PUCCH_Resource));
for (int j =0; j <5 ; j++)
{
pucch_ResourceSetPtr->ResourceList[i]->formatList[j] = malloc(sizeof(struct format));
}
}
我对该程序执行错误访问有任何错误。
- 首先,我有3个结构。
struct format {
int initialCyclicShift;
int nrOfSymbols;
int startingSymbolIndex;
int formatID;
};
struct PUCCH_Resource {
//38.331 maxNrofPUCCH-Resources = 128
int pucch_ResourceId;
int startingPRB;
int intraSLotFrequencyHopping;
int secondHopPRB;
// 5 formats in PUCCH, 38.211. Also in 38.331
struct format (*formatList)[5]; //(*formatList) is a pointer that points to the whole array of size 5. The element of the array is a struct format
};
struct PUCCH_ResourceSet {
// 38.331 maxNrOfPUCCH-ResourceSet=4
int pucch_ResoureSetId;
// 38.331 maxNrofPUCCH-ResourcePerSet = 32; for Initial Access: maxNrofPUCCH-ResourcePerSet = 16. There could be repetition of pucch resource in different sets.
struct PUCCH_Resource (*ResourceList)[32];
};
- 然后我初始化指针,指向父结构 PUCCH_ResourceSet 和子结构。
struct PUCCH_ResourceSet *pucch_ResourceSetPtr = (struct PUCCH_ResourceSet*) malloc (sizeof(struct PUCCH_ResourceSet));
pucch_ResourceSetPtr->ResourceList = malloc(sizeof(struct PUCCH_Resource));
for (int i = 0; i <32; i++){
for (int j = 0; j <5; j++)
pucch_ResourceSetPtr->ResourceList[i]->formatList[j]= malloc(sizeof(struct format));
}
(edit) 我尝试按照下面成员的建议初始化所有结构,但仍然有同样的问题。
- 然后尝试为结构的每个成员赋值的 get 函数,例如:
pucch_ResourceSetPtr->ResourceList[0]->pucch_ResourceId=0;
pucch_ResourceSetPtr->ResourceList[0]->startingPRB = 0;
pucch_ResourceSetPtr->ResourceList[0]->formatList[0]->formatID=0; //this is where I have the error
上面这行代码是第一个给struct的成员赋值;这是我出错的地方。
根据窃听,我看到当 PUCCH_ResourceSet
时,它看到一个内存块被分配给结构,它的子结构,PUCCH_Resource
,而不是它的孙结构,格式如下所示在下面的屏幕截图中。
我怀疑这是问题所在,但不明白为什么没有为格式结构分配内存块。
此外,为了将内存分配给结构成员而对代码进行了一些操作之后,我在格式结构上遇到构建错误:
有人知道这种行为的原因以及我该如何解决吗?
首先在嵌套结构中,我必须为结构分配内存。
结构中存在多个问题,导致我分配内存的方式出现问题。例如,我使用指向任何数组的指针而不是指针数组。
struct format (*formatList)[5]; //this is no array of pointer but a pointer to the beginning of an array.
我应该使用:
`struct format *formatList[5];`
因此,我无法在第 1 步中正确分配内存。
声明结构的合适代码如下。
struct PUCCH_ResourceSet *pucch_ResourceSetPtr = (struct PUCCH_ResourceSet*) malloc (sizeof(struct PUCCH_ResourceSet));
printf("%d", sizeof(struct PUCCH_Resource*));
for (int i = 0; i <32; i++){
pucch_ResourceSetPtr->ResourceList[i] = malloc(sizeof(struct PUCCH_Resource));
for (int j =0; j <5 ; j++)
{
pucch_ResourceSetPtr->ResourceList[i]->formatList[j] = malloc(sizeof(struct format));
}
}