我有这样的结构
struct Example
{
int a;
int ** b;
}
我想以这样的方式调用 malloc,然后我可以拥有 b[][],一个双整数数组。在我的 main 中以 example 名称声明结构后,我这样做了
*example.b = malloc(x);
example.b = malloc(y);
其中 x 和 y 被定义并分配无符号整数。
这样做会给我带来段错误。如何从这样的双指针中获取双数组?
我有这样的结构
struct Example
{
int a;
int ** b;
}
我想以这样的方式调用 malloc,然后我可以拥有 b[][],一个双整数数组。在我的 main 中以 example 名称声明结构后,我这样做了
*example.b = malloc(x);
example.b = malloc(y);
其中 x 和 y 被定义并分配无符号整数。
这样做会给我带来段错误。如何从这样的双指针中获取双数组?
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");
}
首先,您希望内存用于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
a来释放此内存:free
for (i = 0; i < x; ++i)
free(example.b[i]);
free(example.b);