为什么创建一个字符串会影响其他变量?
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;
}
我有以下代码。
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;
}