1

我有这样的结构

struct Example
{
    int a;
    int ** b;
}

我想以这样的方式调用 malloc,然后我可以拥有 b[][],一个双整数数组。在我的 main 中以 example 名称声明结构后,我这样做了

*example.b = malloc(x);
example.b = malloc(y);

其中 x 和 y 被定义并分配无符号整数。

这样做会给我带来段错误。如何从这样的双指针中获取双数组?

4

2 回答 2

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");
}
于 2013-10-08T00:52:17.197 回答
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));

并且不要忘记必须调用每个malloca来释放此内存:free

for (i = 0; i < x; ++i)
    free(example.b[i]);
free(example.b);       
于 2013-10-08T00:50:09.173 回答