数组元素的值在调用者和被调用者中不同



我有一个函数,它将一个2d数组作为参数传递给另一个函数。2d数组作为int**传递。

呼叫方功能:

bool isMatch(string s, string p)
{
int **dp;
int* a[s.size()];
dp = a;
for(int i=0;i<s.size();i++)
{
int b[p.size()];
dp[i] = b;
}
for(int i=0;i<s.size();i++)
{
for(int j=0;j<p.size();j++)
{
dp[i][j] = -1;
}
}
cout<<dp[0][0]<<endl;
return test(s,p,dp);
}

调用函数:

bool test(string s,string p,int **dp)
{
cout<<dp[0][0]<<endl;
return true;
}

现在,当我在isMatch((中打印dp[0][0]时,会打印出预期值-1。但是,当我将2d数组传递给另一个函数(即;test(((并打印dp[0]时,我会得到950192880、337836240等随机值。为什么在调用方函数退出之前,所有通过引用传递的内容和堆栈都没有被清除,却会发生这种情况?

数组bfor循环中声明,因此在循环外无效。你说dp的输出如预期,但这是偶然的。您应该使用new分配b

最新更新