我有这样的结构
struct Example
{
int a;
int ** b;
}
我想以这样的方式调用malloc,然后我可以使用b [] [],一个双数组的int。 在我的主要
中的名称示例下声明结构后,我这样做*example.b = malloc(x);
example.b = malloc(y);
其中定义x和y并分配无符号整数。
这样做会给我带来段错误。 如何从这样的双指针中获取双数组?
答案 0 :(得分:0)
首先,你需要x
指针的内存,然后你希望每个指针都指向足够大的内存块来保存y
个整数:
int i = 0;
example.b = malloc(x * sizeof(int*));
for (i = 0; i < x; ++i)
example.b[i] = malloc(y * sizeof(int));
并且不要忘记,对于每个malloc
,必须调用free
来释放这段记忆:
for (i = 0; i < x; ++i)
free(example.b[i]);
free(example.b);
答案 1 :(得分:0)
要分配与int[nrows][ncols]
对应的内存,您可以执行以下操作:
int i, nrows, ncols;
struct Example str;
str.b = malloc(nrows * sizeof(*(str.b)));
if (str.b==NULL)
printf("Error: memory allocation failed\n");
for (i=0; i<nrows; ++i) {
str.b[i] = malloc(ncols * sizeof(*(str.b[i])));
if (str.b[i]==NULL)
printf("Error: memory allocation failed\n");
}