【问题标题】:Value of array elements is different in caller and callee调用者和被调用者中数组元素的值不同
【发布时间】: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。当ij 都没有被声明时,目前还不清楚cout&lt;&lt;dp[i][j]&lt;&lt;endl; 应该如何编译
  • dp[i] = b; -- b 在其作用域的最后一行死掉。
  • 请不要编造一些幻想代码在这里发布。相反,请确保您发布的代码确实产生了您声称的输出。
  • 抱歉,我在发帖时忘记更改 i 和 j 我已经更新了代码
  • @Quentin 谢谢!!没想到

标签: c++ arrays pointers multidimensional-array


【解决方案1】:

数组b是在for循环中声明的,所以在循环外是无效的。您说dp 的输出符合预期,但这是偶然的。你应该使用new分配b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    相关资源
    最近更新 更多