0
好的,所以问题基本上就像标题一样。找不到一个问题,它的所有位,所以我想我会问。分配结构数组中的指针
说我要结构的数组形如以下
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*
}
}
这是什么,我有我的代码归结版本。我想知道我写的东西可能会出什么问题 - 就像任何可能的事情一样。我不特别寻找任何东西,只是一般问题与上述,如内存/堆问题,指针错误等。
抛出“虚拟内存用尽”。我的代码错误检查使用malloc上的包装函数,所以我非常确定不是这样。
从这里看起来很好。这将有助于避免编码错误使用定义/常量而不是'16'。我不知道你是否打算在这些数组中存储字符串,但如果是这样,不要忘记null结束符。 –
如果你打算进行健壮的设计,你可以使用更多*封装*,即把't_woo'变成一个独立的对象。这将涉及将'num_ns'放入't_woo'中,并且具有为单个't_woo'(以及另一个在后来销毁)完成所有构建的功能。然后,在你分配内存给它们之后,尽可能快地遍历你的't_woo'列表,在每个列表中调用构造函数。 –
'并且每轮循环都会改变.. ..您是否在每次循环分配之前释放内存?也许你的外部循环运行很多次,它会产生内存错误。 –