struct atom {
int x;
int y;
int z;
double mass;
};
struct molecule {
struct atom *member;
int natoms;
};
struct system {
struct molecule *fragment;
int nfrags
};
struct system sys;
sys.nfrags=get_number_of_fragments;
????
该系统有一定数量的分子,每个分子都有一定数量的原子。我不知道如何分配这些东西。如果我先分配 sys.fragment,似乎 sizeof(分子(是未定义的,因为我还没有定义原子的数量(那么它怎么会有大小?如果我尝试先定义原子的数量,如何指定我错位的片段?
我有函数可以返回任何分子/片段的原子数以及片段数,但卡在从这里开始。
AFAIK sizeof(X( 不能是"undefined"。在这个例子中,sizeof(molecule(被很好地定义为存储一个分子实例所需的内存量:一个原子指针(注意:不是你可以放在这里的任何数组的大小,只是指针的大小(和一个整数。因此,使用第一种方法并首先分配您的 sys.fragment 是完全可以的:
sys.fragment = malloc(sys.nfrag * sizeof(sys.fragment));
sys.fragment = calloc(sys.nfrag, sizeof sys.fragmemt[0]);
或
sys.fragment = malloc(sys.nfrag * sizeof sys.fragment[0]);
当性能很重要时(但不要忘记检查溢出!
malloc(sizeof(system))
就这么简单
你基本上有一个:
size = X;
first = malloc(X * sizeof(First));
first->second = malloc( N * sizeof(Second));
等等