一旦从函数返回控件,变量占用的空间是否会被释放?
我以为它被解除了分配.
在这里,我编写了一个函数,即使在从函数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;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
你发布的不是C++代码 - 以下在C++中是非法的:
int min[Sum+1];
Run Code Online (Sandbox Code Playgroud)
但总的来说,您的程序表现出不确定的行为.这意味着任何事情都可能发生 - 它甚至可能起作用.
当函数返回时,该空间被"释放" - 但这并不意味着数据不在内存中.数据仍将在堆栈中,直到其他一些函数覆盖它为止.这就是为什么这些类型的错误是如此棘手 - 有时它会工作得很好(直到突然它没有)