无法获得正确的指针

时间:2014-05-08 04:33:04

标签: c

此方法返回指向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)

我一直在接受错误的价值观,我不知道为什么。

2 个答案:

答案 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非常重要,因为它构成了原型。