[英]Memory allocation
我有如下声明的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循环
此代码段应清除您需要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
分配的所有指针,否则会发生内存泄漏。
您没有分配任何内容,而是覆盖了堆栈上的相同数据(然后在退出循环时超出范围)。
在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,而不是更有意义的初始化(如果您要这样做)。
由于这是C ++代码
我将使用以下新运算符
WF_LIST_WORKUNIT_P_FE * listWU =新的WF_STRUCT_WORKUNIT_FE [nbrRequested + 1];
捕获的是结构WF_STRUCT_WORKUNIT_FE本身是结构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工作分配内存吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.