说我想要一个形状如下的
结构数组typedef struct s_woo{
char** n;
char* x;
} t_woo;
所以我相信我应该做
t_woo* woos = malloc(num_woos * sizeof(*woos));
看起来很简单(并且应该阻止人们因为我投射malloc的习惯而对我大吼大叫)。
然后我想初始化每个结构中的东西。
我这么直观地说:
for(i = 0; i < num_woos; i++){
num_ns = randomint1 / randomint2; //let's say num_ns is big, like 250-ish, average, and changes every round of the loop
woos[i].n = malloc(num_ns * sizeof(char*));
woos[i].x = malloc(num_ns * sizeof(char));
for(j = 0; j < num_ns; j++){
woos[i].n[j] = malloc(16 * sizeof(char)); // I just want 16 characters per char*
}
}
这是我在代码中的简化版本。我想知道我写的东西可能出现什么问题 - 就像任何可能的事情一样。我没有特别寻找任何东西,只是上面的一般问题,如内存/堆问题,指针错误等。
遗漏&#34;虚拟内存耗尽&#34;。我的代码错误使用malloc上的包装器函数检查它,所以我非常确定不是它。
答案 0 :(得分:1)
更好:
static const size_t woo_n_size = 16;
/* To make sure you use 16 everywhere,
* also easier to change it
*/
struct woo_item {
char n[woo_n_size];
char x;
};
struct s_woo {
struct woo_item *items;
size_t size; / * optinal, to keep track of item count */
}
使用woo_item
结构,您可以确保没有分配x
的{{1}},反之亦然。
您可以通过指定null元素来关闭每个列表来记住woo_items的数量,或者只是将n[woo_n_size]
成员存储在size