malloc()for Two Dimensional Arrays

时间:2014-06-12 23:01:50

标签: c malloc

我想初始化一个n * n方阵,然后通过引用将它传递给另一个函数。但它甚至没有编译。我已经尝试了一切,请帮助。

#include<stdlib.h>
int main()
{
    int i, j, n = 3;
    float **a;
    a = malloc(n * sizeof (float **));//Here I try to create the n pointers to pointer to float for the rows
    for(i = 1;i <= n;i++){
        a[i] = malloc(n * sizeof(float *)); //Here I try to create the n * n pointers to float for the columns
    for(j = 1;j <= n;j++)
        *(*(a + i - 1) + j - 1) = malloc(sizeof(float));  //Here I try to free the space for the elements
    return 0;
}

2 个答案:

答案 0 :(得分:2)

你需要这样声明:

float **a;
a = malloc(n * sizeof (float *)); // rows
for(i = 0;i < n;i++){
        a[i] = malloc(n * sizeof(float)); // cols
}

答案 1 :(得分:0)

您的代码显示的内容与您的评论建议您尝试的内容有所不同。

  

这里我尝试为列

创建浮动的n * n指针

通常,float的2-D“数组”有N x N个浮点数 - 而不是N x N浮点数指针。你正在制作一个三维“数组”,其中最里面的维度是1.

此外,您在sizeof表达式中使用了错误的类型,因此malloc内存量不正确。

请澄清一个2-D“数组”是否是您想要的,或者您是否确实需要代码中额外的间接级别。 (之后我会更新我的答案)。

(NB。我在引号中说“数组”,因为我们不是在谈论一个真正的多维数组;它实际上是一个指向浮点数组的第一个元素的指针数组(或者在三维情况下) ,指向一个指向浮点数的指针数组。

相关问题