c - 将 malloc 数组分配给堆栈数组

标签 c pointers malloc heap-memory stack-memory

我试图从 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;
}

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

最佳答案

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

关于c - 将 malloc 数组分配给堆栈数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10662781/

相关文章:

c - For循环不将数组内的特殊字符识别为单个字符

C - 这行是什么意思?

c - 指针和排序

c++创建指向新类的指针

linux - 是否有 malloc 变体在调用 `free()` 时将 block 清零?

c - 在保留分隔符的同时在 C 中拆分 char 数组

不持有有效地址的 C 程序指针仍然没有给出段错误

Windows XP 上的 malloc() 代码崩溃

c - 释放二维动态数组时堆损坏

c - 如何在 C 中将逗号分隔的字符串转换为字符串数组