変数が占有する領域は、関数が関数から返されるとすぐに割り当て解除されません。変数が占有する領域は、いつ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;
}
FYI - "失敗"すると、コードはまだ動作することを意味しますが、予測できない結果が得られます。通常、従来の意味で失敗する(セグメンテーションフォールトなど)より悪いのはどちらですか? –
または、特定のオペレーティングシステムでは、割り込みがオフになったり、信号が受信されたりします。これは追跡が難しい断続的なバグの1つになる可能性があります。 – keraba
または、リターンによってスタックが縮小され、OSによってページがアンロードされる可能性がある場合。ページにアクセスしようとすると、segフォルトが発生することがあります。 –