【问题标题】:malloc() for Two Dimensional Arraysmalloc() 用于二维数组
【发布时间】:2014-06-12 23:01:49
【问题描述】:

我想初始化一个 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;
}

【问题讨论】:

  • "It doesn't compile" 你得到什么错误信息,在哪一行?
  • 另外,这不是递归。
  • 你尝试了一切?在莫斯科编程俱乐部,我们将候选人的长子和老鼠一起锁在地下室,直到算法正常工作。 这就是你看到真正动机的地方。
  • 哥们,不要像其他人一样写*(A+i),不如写A[i]
  • @KerrekSB:啊。现在我明白为什么俄罗斯是 ACM ICPC 的世界冠军了……

标签: c malloc


【解决方案1】:

你需要像这样声明它:

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

【讨论】:

    【解决方案2】:

    您的代码显示的内容与您的评论建议您尝试执行的操作不同。

    在这里我尝试创建 n * n 个指针来浮动列

    通常,浮点的二维“数组”具有 N x N 浮点数 - 而不是 N x N 指向浮点数的指针。您正在制作一个最内维度为 1 的 3-D“数组”。

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

    请说明您是否需要二维“数组”,或者您是否确实需要代码中的额外间接级别。 (之后我会更新我的答案)。

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

    【讨论】:

    • @Ivanz 你的意思是你想要一个指向浮点数组的指针数组? (“二维数组”为float a[n][n];
    • 我不太确定我回答了什么,但是好的..:)
    • “通常,一个 2-D“数组”的浮点数有 N x N 个浮点数 - 而不是 N x N 个指向浮点数的指针。您正在制作一个最内维度为 1 的 3-D“数组”。 "靶心
    猜你喜欢
    • 2011-10-30
    • 2013-11-30
    • 1970-01-01
    • 2018-03-20
    • 2014-06-25
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多