结构中的双指针

时间:2013-10-08 00:46:04

标签: c arrays pointers malloc dynamic-allocation

我有这样的结构

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

我想以这样的方式调用malloc,然后我可以使用b [] [],一个双数组的int。 在我的主要

中的名称示例下声明结构后,我这样做
*example.b = malloc(x);
example.b = malloc(y);

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

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

2 个答案:

答案 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");
}