【发布时间】:2020-04-21 14:33:47
【问题描述】:
我有一个将二维数组作为参数传递给另一个函数的函数。二维数组作为 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,这是预期值。但是,当我将二维数组传递给另一个函数(即 test())并打印 dp[0][0] 时,我会得到随机值,例如 950192880、337836240 等。为什么会发生这种情况,尽管所有内容都通过引用传递并且堆栈是直到调用者函数退出才清除?
【问题讨论】:
-
您需要发布minimal reproducible example。当
i和j都没有被声明时,目前还不清楚cout<<dp[i][j]<<endl;应该如何编译 -
dp[i] = b;--b在其作用域的最后一行死掉。 -
请不要编造一些幻想代码在这里发布。相反,请确保您发布的代码确实产生了您声称的输出。
-
抱歉,我在发帖时忘记更改 i 和 j 我已经更新了代码
-
@Quentin 谢谢!!没想到
标签: c++ arrays pointers multidimensional-array