此方法返回指向int数组的第一个元素的指针
int *getNumbers(){
int *retPtr;
int ret[6];
ret[0] = 1;
ret[1] = 2;
ret[2] = 3;
ret[3] = 4;
ret[4] = 5;
ret[5] = 6;
retPtr = ret;
return retPtr;
}
此时我可以执行*(arryPtr + x)
并获取数组值
int* arryPtr = getNumbers();
int result = NumberProcess1(arryPtr);
一旦我开始使用这种方法,我就无法做到。
int NumberProcess1(int* numbers)
我一直在接受错误的价值观,我不知道为什么。
答案 0 :(得分:4)
ret[6];
& return retPtr
返回该变量放置在堆栈中的地址
堆叠的东西是它上面的帧得到push
ed& pop
已编辑,因此指针所指向的位置可能会被下一个堆栈帧过度覆盖。
因此,您永远不应该返回指向局部变量的指针。
在heap
上分配:
int *ret = malloc(sizeof(int));
答案 1 :(得分:1)
int ret[6];
声明一个仅存在于getNumbers()
函数中的数组。该函数返回后,内存不再有效。尝试使用它会导致不确定的行为。
对此的一个解决方案是将其static int ret[6];
其他解决方案包括让调用者分配缓冲区,并使用动态分配。
此外,该函数应为int *getNumbers(void)
- void
非常重要,因为它构成了原型。