2015-08-16 88 views
1

我有以下代碼。爲什麼創建一個字符串會影響其他變量?

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

該代碼打印出意外的值。但是如果我評論「字符串」;排它工作正常。是什麼原因?

一些功能是:

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; 
} 
+3

'somefuction()'返回其局部變量的地址? –

+1

未定義的行爲。 – dasblinkenlight

+0

將somefunction()添加到問題 – chamathabeysinghe

回答

3

您正在返回一個指針在someFunction()堆棧上存在一定的價值。即一個局部變量。這些不會超過函數調用的結尾。

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; 
} 
相關問題