c语言 - 将错误定位数组分配给堆叠数组



我试图将数组从child_prog()返回给main()。代码如下所示:

#include<stdio.h>
#include<stdlib.h>
int* child_prog(int some_input);
void main(void){
  int C[10];
  int some_input;
  C = child_prog(some_input);
}
int* child_prog(int some_input){
  static int out[10];
  // ...
  // ... some wizardry
  return out;
}

现在编译器生成一个错误,指出它无法将从child_prog(int*类型(返回的值分配给C(这是一种int[]类型(。事实上,当我C int*malloc 10 ints内存时,该程序运行良好。但我不明白为什么编译器不能将从child_prog(定义为 static int out[10] 的数组,因此又是一个指针(分配给C(定义为 C[10] 的数组,因此又是一个指针(。

  1. 不能分配给数组。你需要memcpy它。
  2. int* != int[] 第一个是可能指向 int s 序列int的指针,第二个 int s 序列
  3. 您可以使用 int *C; 并将数组的长度(如果在编译时未知(作为 out 参数传递。
  4. static int out[10];不是malloc的编辑,而是静态的。

一种解决方案是将 C 声明为:

int *C;

正如宾亚明所说您无法更改数组的地址,因为它是静态分配的,这正是您尝试的:

C = child_prog(some_input);
  • int []的类型是int * const这意味着它指向的内存是一个常量,尝试更改它将给出编译器错误。显然不等于int *.
  • child_prog() 中的变量out是静态分配的,这意味着它不在堆栈上,而是在全局数据部分的某个地方。因此,无论您调用child_prog()多少次,您都将始终返回相同的内存位置。
  • 因此,要复制数组,如果要保存从child_prog()返回的数据,请执行memcpy(dest,src,bytes)
#include<stdio.h>
#include<stdlib.h>
#define SUCCESS    0 
#define FAILURE    1 
int child_prog(int some_input, int *output, int output_size);
void main(void){
  int C[10];
  int some_input;
  C = child_prog(some_input, c, 10);
}
int  child_prog(int some_input, int *output, int output_size)
{
  static int source[10];
      ...
      .../*some wizardry*/
  memcpy(output, source, output_size);

     ... if (erronous Condition)
             return FAILURE;
         else
  return SUCCESS;
}

相关内容

  • 没有找到相关文章

最新更新