如何在C中定义数据结构,对于我想要存储的每个位置:一个大小为M的int数组,一个大小为N的int数组和一个double值?我尝试了以下但没有成功。
在我的代码开头,我定义了我的数据结构(LOCOPT),如下所示:
typedef struct LOCOPT
{
int *org;
int *des;
double value;
} LOCOPT;
LOCOPT *locopt;
然后,我使用calloc初始化locopt,如下所示:
for( locopt_ctr=0 ; locopt_ctr<locopt_max ; locopt_ctr++ )
{
locopt[locopt_ctr].org = (LOCOPT *) calloc(M, sizeof(LOCOPT));
locopt[locopt_ctr].des = (LOCOPT *) calloc(N, sizeof(LOCOPT));
}
当我尝试在代码中使用它时它不起作用:我想这样做:
for( m=0 ; m<M ; m++ )
locopt[locopt_ctr].org[m] = origin[m]; // regardless of what origin[m] is.
我需要多次使用calloc而不是一次,我不知道该怎么做。我需要正确使用循环。有什么想法吗?
答案 0 :(得分:2)
您的分配存在两个问题,一个是关于locopt
数组本身的内存,另一个是关于如何为每个结构中的des
和org
分配内存
首先,我们不会看到您是否为locopt结构数组分配内存。如果有L
元素,则可以
locopt = calloc(L, sizeof(LOCOPT));
然后,你仍然需要为它中的字段org
和des
分配内存(对于每个结构,就像你一样),但是
locopt[locopt_ctr].org = calloc(M, sizeof(int));
同样适用于des
。 LOCOPT
是结构的名称,但数组的类型为int
。
答案 1 :(得分:-1)
你想要立刻做太多事情。让我们首先将其分解为一些简单的部分:
您已宣布LOCOPT *locopt
。在将locopt本身用作指针(或数组语法)之前,必须为它分配内存,例如
locopt[locopt_ctr] = (LOCOPT *) calloc(1,sizeof(LOCOPT));
但这只是努力的一部分。
如果要在locopt的每个实例中存储项目列表,则需要在新分配的locopt实例的成员上再次调用:
locopt[locopt_ctr].org = (int *) calloc(M, sizeof(int));
locopt[locopt_ctr].des = (int *) calloc(N, sizeof(int));
底线 - 如果你有一个指针,你最终必须分配它。