为什么创建一个字符串会影响其他变量?

Why creating a string affect other variables?

我有以下代码。

int *x = somefuction();//return array of two elements
string s;
cout << x[0] << " and " << x[1];

这段代码打印出意外的值。但是,如果我注释掉 "string s;" 行,它就可以正常工作。这是什么原因?

部分函数为:

int* getRowCol(int l){
int min = floor(sqrt(l));
int max = ceil(sqrt(l));
int area = 100000;
int result[2];
for (int col = min; col <= max; col += 1){
    for (int row = min; row <= col; row += 1){
        if (col*row < area && row*col>=l){ 
            area = row*col;
            result[0] = row;
            result[1] = col;
        }
    }
}

return result;
}

您正在返回指向 someFunction() 中堆栈上存在的某个值的指针。 IE。局部变量。这些不会在函数调用结束后继续存在。

int* someFunction()
{
    int someInts[2] = {10, 20}; // only exists inside someFunction
    return someInts;
}

也许您应该使用 std::vector,它将以一种安全的方式分配内存,这样可以安全使用。 以任何方式取消引用此返回的指针都是 Undefined Behaviour。您的代码绝对可以做任何事情。 尝试这样的事情:

std::vector<int> someFunction()
{
    std::vector<int> someInts {10, 20};
    someInts.push_back(30);
    return someInts;
}