我试图传递一个整数数组。下面是我想做的一个例子。基本上,我可以编写一个通过返回指针返回int数组的函数。现在,我想将该函数用作另一个函数的参数。目标是让一个函数创建一个int数组,然后进入另一个将int数组作为输入的函数。没用在使用int *指针的函数内部,int *指针仅变为-8435432,并且在将其分配给另一个int *指针后无法读取其元素。我不明白为什么我可以从一个函数取回一个int数组,但是不能将其用作另一个函数的输入?

int * returnIntArray()
{
    int * thePointer;
    int j[3];
    thePointer = j;

    j[0] = 1;
    j[1] = 3;
    j[2] = -1;
    return thePointer;
}

//
int * takesTheIntArray(int * anIntArray)
{
    int x,y,z;
    int * returnIt;
    returnIt = anIntArray;
    x = returnIt[0];
    y = returnIt[1];
    z = returnIt[3];
    return returnIt;
}


int _tmain(int argc, _TCHAR* argv[])
{
    int y,z,p;
    int * x;
    x = returnIntArray();
    y = x[0];
    z = x[1];
    x = takesTheIntArray(returnIntArray());
    cout << x[0] << ",  " << x[1];
    //cout << theVector[1];
    cout << "hello";
}

最佳答案

int * thePointer;
    int j[3];
    thePointer = j;

应该:
int* thePointer = new int[3];

第一个版本的问题是您返回的是静态分配的(分配在堆栈上)。函数返回时,它将超出范围。在第二个版本中,它是动态分配的(分配在堆上)。完成后,请记住在thePointer上调用delete[](否则会泄漏内存)。

10-08 08:27
查看更多