我的STRUCT1结构声明如下
typedef struct struct1 {
short int nbr_fe;
[size_is(nbr_fe)] STRUCT2 ptr_fe[*];
} STRUCT1;
STRUCT2也是STRUCT1
中的另一个结构然后我有一个指针声明如下
typedef [ptr] STRUCT1 * ptr;
我必须在nbrRequested上为一个STRUCT1数组分配一个内存 到目前为止我已经
了STRUCT1 obj1;
memset((void*)&obj1, '\0' , sizeof(STRUCT1));
for(int i1=0;i1<(int)nbrRequested;i1++) {
STRUCT2 obj2;
memset((void*)&obj2, '\0' , sizeof(STRUCT2));
obj1.ptr_fe[i1] = obj2;
}
ptr ptr2;
ptr2 = &obj1;
但是如果nbrRequested大于500,则循环进入无限状态并且应用程序挂起。
有没有更好的方法来分配内存而不使用for循环
答案 0 :(得分:3)
这个片段应该清除你需要malloc内存,清除它,然后你可以将指针分配给结构成员。
STRUCT1 listWU;
memset(&listWU, 0 , sizeof(STRUCT1));
for(int i1=0; i1<(int)nbrRequested; i1++) {
STRUCT2 *temp;
temp = malloc(sizeoF(STRUCT2));
memset(temp, 0 , sizeof(STRUCT2));
listWU.lst_Workunit_fe[i1] = temp;
}
哦,不要忘记当你完成这个结构时,你需要释放这个结构中malloc
'的所有指针,否则你会有内存泄漏。
答案 1 :(得分:2)
你没有分配任何东西,你正在覆盖堆栈上的相同数据(当循环退出时,它会超出范围。
在C ++中,您使用new运算符分配内存。在C中你会使用malloc。因此,对代码的最小重写将是这样的(在C中,因为这似乎是您正在编写的内容)
// Allocate enough space for the array of `WF_LIST_WORKUNIT_P_FE`s
WF_LIST_WORKUNIT_P_FE listWU = malloc(sizeof(WF_STRUCT_WORKUNIT_FE) * nbrRequested);
memset(listWU, 0, sizeof(WF_STRUCT_WORKUNIT_FE) * nbrRequested));
当然,这只是将数组中的每个结构都设置为0,而不是更有意义的初始化,如果这是你想要的。
答案 2 :(得分:0)
因为这是一个C ++代码
我会使用new运算符,如下所示
WF_LIST_WORKUNIT_P_FE * listWU = new WF_STRUCT_WORKUNIT_FE [nbrRequested + 1];
catch是结构WF_STRUCT_WORKUNIT_FE本身是Structure WF_LIST_WORKUNIT_FE的嵌套结构
那是
typedef struct wf_list_workunit_fe
{
short int nbr_Workunits_fe;
[size_is(nbr_Workunits_fe)] WF_STRUCT_WORKUNIT_FE lst_Workunit_fe [*];
} WF_LIST_WORKUNIT_FE;
不会为WF_LIST_WORKUNIT_FE工作分配内存吗?