C代码的基本错误

时间:2014-05-19 16:54:41

标签: c

我正在为考试而学习,我遇到了这个问题:

此代码中的关键错误是什么?

int *numbers(int a, int b)
  {
     int array[2];
     array[0] = a * b;
     array[1] = a + b;
     return array;
  }

现在,我没有太多的C经验,但我根本没有看到这个代码中的严重错误。也许我是一个白痴,只是忽略了一些明显的东西。我唯一能看到的是没有使用malloc分配内存,但我不认为这是一个大问题。

感谢任何帮助!

4 个答案:

答案 0 :(得分:5)

这里最基本的问题是,只要numbers()返回, array 就不再存在。返回的指针指向可能会在一瞬间被覆盖的空间。

答案 1 :(得分:3)

当函数返回时,变量数组将消失,但是您已经返回指向其在内存中的位置的指针。

答案 2 :(得分:3)

你基本上是返回垃圾,因为数组在返回后会超出范围。如果你使数组静态一切都会好的。

答案 3 :(得分:0)

如果内存WAS分配了malloc,那么该函数将是有效的。函数退出后,在函数(堆栈)范围内分配的任何内存都不再有效。