一旦從函數返回控件,變量佔用的空間是否會被釋放?什麼時候變量佔用的空間在C++中被釋放?
我以爲它得到了釋放。
這裏我寫了一個函數,即使從函數CoinDenom返回一個數組的局部引用後,它也能正常工作,使用它來打印計算總和所需的最小硬幣數量的結果。 如果空間得到釋放,它如何能夠打印正確答案?
int* CoinDenom(int CoinVal[],int NumCoins,int Sum) {
int min[Sum+1];
int i,j;
min[0]=0;
for(i=1;i<=Sum;i++) {
min[i]=INT_MAX;
}
for(i=1;i<=Sum;i++) {
for(j=0;j< NumCoins;j++) {
if(CoinVal[j]<=i && min[i-CoinVal[j]]+1<min[i]) {
min[i]=min[i-CoinVal[j]]+1;
}
}
}
return min; //returning address of a local array
}
int main() {
int Coins[50],Num,Sum,*min;
cout<<"Enter Sum:";
cin>>Sum;
cout<<"Enter Number of coins :";
cin>>Num;
cout<<"Enter Values";
for(int i=0;i<Num;i++) {
cin>>Coins[i];
}
min=CoinDenom(Coins,Num,Sum);
cout<<"Min Coins required are:"<< min[Sum];
return 0;
}
僅供參考 - 通過「失敗」,他意味着代碼仍然有效,但會給您帶來不可預知的結果。這通常比傳統意義上的失敗更糟糕(分段錯誤等) – 2009-07-07 13:38:15
或者,如果在某些操作系統上中斷或您收到信號。它可能是那些非常難以追蹤的間歇性錯誤之一。 – keraba 2009-07-07 13:38:54
或者如果返回導致堆棧縮小到足以使操作系統卸載頁面。然後嘗試訪問該頁面可能會導致seg故障。 – 2009-07-07 15:16:02