我正在为考试而学习,我遇到了这个问题:
此代码中的关键错误是什么?
int *numbers(int a, int b)
{
int array[2];
array[0] = a * b;
array[1] = a + b;
return array;
}
现在,我没有太多的C经验,但我根本没有看到这个代码中的严重错误。也许我是一个白痴,只是忽略了一些明显的东西。我唯一能看到的是没有使用malloc分配内存,但我不认为这是一个大问题。
感谢任何帮助!
答案 0 :(得分:5)
这里最基本的问题是,只要numbers()
返回, array 就不再存在。返回的指针指向可能会在一瞬间被覆盖的空间。
答案 1 :(得分:3)
当函数返回时,变量数组将消失,但是您已经返回指向其在内存中的位置的指针。
答案 2 :(得分:3)
你基本上是返回垃圾,因为数组在返回后会超出范围。如果你使数组静态一切都会好的。
答案 3 :(得分:0)
如果内存WAS分配了malloc,那么该函数将是有效的。函数退出后,在函数(堆栈)范围内分配的任何内存都不再有效。