【问题标题】:How can I declare an array in one function, pass its address and dynamically allocate it in another function (in C)?如何在一个函数中声明一个数组,传递它的地址并在另一个函数中动态分配它(在 C 中)?
【发布时间】:2020-03-01 20:13:54
【问题描述】:

我想知道如何动态分配和填充数组,并使值在另一个函数中可用。我希望在没有任何返回值的情况下执行此操作,因此我想将 function1 的地址传递给 function2,其中 function2 分配由 function1 的地址指向的内存。下面是一个简短的伪代码示例:

void func2(int **array)
{   
    // Read array length from a data file.

    *array = malloc(array_length*sizeof(int));

    // Set array values from a datafile.
}

void func1()
{       
    int *array;

    func2(&array);

    // Use array values
}

我该怎么做?我尝试了很多次,但最终以“地址未对齐错误”或“地址边界错误”告终。我最终希望使用自定义结构来做到这一点,但我相信动态分配数组的过程是相似的。非常感谢您的帮助!

【问题讨论】:

  • 您所拥有的几乎完全符合您的标题所描述的内容(除了白话;您传递的是 指针 的地址,而不是数组)。我怀疑您的问题来自不便省略的// Set array values from a datafile.,对此,我进一步怀疑运算符优先级的误解。当然,如果没有实际代码,也没有详细调试它偏离轨道的位置,那纯属猜测,这会导致糟糕的答案。
  • 如果您仍然遇到问题,请编辑问题以包含stackoverflow.com/help/minimal-reproducible-example
  • 你需要考虑的一个问题是调用函数如何知道数组有多大——目前,func2() 似乎没有办法传达这一点(除非你'我已经将array_length 作为全局变量或文件范围变量,但这会很讨厌,尤其是当数组不是全局变量时)。

标签: c arrays function pointers


【解决方案1】:

我认为你可以这样做:

void func2(int **array)
{
    // Read array length from a data file.

    *array = (int *)malloc(array_length*sizeof(int));

    // Set array values from a datafile.
    (*array)[0] = 2;
    (*array)[1] = 7;
}

void func1()
{
    int *array = NULL;

    func2(&array);

    // Use array values
    printf("\n%d", array[0]);
    printf("\n%d", array[1]);
}

【讨论】:

  • 这是一道C题
猜你喜欢
  • 2021-05-30
  • 1970-01-01
  • 2016-10-20
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
相关资源
最近更新 更多