[英]Dynamically allocate struct of char array and int array
我正在尝试使用malloc
为包含char
数组和int
数组的struct
分配内存。 我将使用来自文件长度的信息来填充这两个数组,该文件的长度我事先不会知道。
typedef struct bulk_data{
int *l_bulk_pos_arr;
char (*l_bulk_anc_arr)[10001];
}bulk_data;
我仍在学习内存分配,但是我在这里想像的是,由于每个char
数组元素的大小都是固定的,因此我不必遍历该数组来分配内存。 至此,我现在知道了我需要的数组元素的数量( n_rows
)。 我已经尝试了以下方法(显然不是同时所有):
struct bulk_data *bulk_counts;
bulk_counts = malloc(sizeof(bulk_data)); // 1st attempt
bulk_counts = (bulk_data *)malloc(sizeof(bulk_data)); // 2nd
bulk_counts = malloc(sizeof(bulk_data) * n_rows); // 3rd
bulk_counts = (bulk_data *)malloc(sizeof(bulk_data) * n_rows); // 4th
编译时没有错误,但是上面列出的尝试似乎没有正确分配空间:
(gdb) p bulk_counts->l_bulk_anc_arr
$1 = (char (*)[10001]) 0x0
(gdb) p bulk_counts->l_bulk_anc_arr[0]
Cannot access memory at address 0x0
(gdb) p bulk_data->l_bulk_pos_arr
$2 = (int *) 0x0
(gdb) p bulk_data->l_bulk_pos_arr[0]
Cannot access memory at address 0x0
我想知道如何为这种情况分配内存,但是在您不知道每个char
数组元素中的字符数的情况下,我也想知道。
l_bulk_anc_arr
是指向10001
char
数组的指针。 它不是数组。
您仍然必须为其分配内存。
struct bulk_data *bulk_counts;
bulk_counts = malloc(sizeof(bulk_data));
bulk_counts->l_bulk_pos_arr = malloc( /*some size*/ );
bulk_counts->l_bulk_anc_arr = malloc(10001);
现在,您可以使用:
(*bulk_counts->l_bulk_anc_arr)[0] = 'a';
(*bulk_counts->l_bulk_anc_arr)[1000] = '\0';
要么
bulk_counts->l_bulk_anc_arr[0][0] = 'a';
bulk_counts->l_bulk_anc_arr[0][1000] = '\0';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.