【问题标题】:2D array unable to pass properly through a function [duplicate]二维数组无法正确通过函数[重复]
【发布时间】:2021-11-15 07:01:22
【问题描述】:

我正在尝试编写一个动态编程问题,但我没有找到将 s[][] 矩阵传递给该函数的方法。任何人都可以帮助我解决问题。当我在代码中不包含 printparanthesis 函数的情况下运行代码时,我也会遇到分段错误。我知道它需要在该二维数组中有边界,但我无法弄清楚如何传递它,以便当我在矩阵顺序函数中调用此函数时,它可以正确运行。

#include <iostream>

using namespace std;

void printparanthesis(int s[][], int i, int j, char &name)
{
    if (i == j)
          {cout<<name++<<endl;
              return;
          }
     cout<<"(";
     printparanthesis(s,i,s[i][j],name);
     printparanthesis(s,s[i][j]+1,j,name);
     cout<<")";
     
}

void matrixorder(int ar[], int n)
{
    int i,j,l,k,q;
    int m[i][j], s[i][j],p[i];
    
    for (i =1; i<n; i++)
    { m[i][j] = 0; }
    
    for (l=2; l<n; l++)
       {
           for(i=1; i<n-l+1; i++)
            {
                j = i+l-1;
                m[i][j] = 1.0/0.0;
            }
              
           for(k = i; k<j-1;k++)
            {
                q = ((m[i][k] + m[k+1][j]) + (p[i-1] * p[k] * p[j]));
            }
            if (q<m[i][j])
            {
                m[i][j] = q;
                s[i][j] = k;
            }
       }
       
     char name = 'A';
     printparanthesis(s,1,n,name);
     cout<<"Optimal Cost: "<<m[1][n];
}

int main() {

int ar[] = {4,10,3,12,20,7};
int n = sizeof(ar)/sizeof(ar[0]);

matrixorder(ar,n-1);

return 0;
}

【问题讨论】:

  • 在编译时不知道数组大小的情况下传递二维数组是不可能的。如果允许,use something like this。如果不允许,无论如何都做类似的事情,但没有vector
  • 另外,在您知道需要多少存储空间之前,也不要尝试为某些事情分配存储空间。 int m[i][j] 取决于 ij 的大小,ij 的值当时是未知的。

标签: c++


【解决方案1】:

请阅读Passing a matrix in a function (C)

您的代码中还有一些缺陷

void matrixorder(int ar[], int n)
{
    int i,j,l,k,q;
    int m[i][j], s[i][j],p[i];
...

会导致内存错误。 ij 未初始化。 int m[i][j] 不是有效的 C。这可能会编译,但您可能会遇到一些讨厌的错误(调试和发布版本之间的不同行为)。 您标记了您的问题C++。因此,我的建议是查看 std 容器,例如 std:vector。它们可以通过引用轻松传递。

如果您想执行一些计算,请查看eigenarmadillo

【讨论】:

  • C 和 C++ 是不同的语言,所以提供的链接是不确定的。
  • @user4581301 来自 OP 的代码是 C 而非 C++。这就是为什么我建议使用适当的容器或 C++ 库的原因。我他喜欢像指针一样坚持使用 C,链接会有所帮助。
  • 好的。当我尝试在没有 prinparanthesis 函数的情况下运行代码时,我也遇到了分段错误。你知道是什么原因吗
猜你喜欢
  • 2018-09-11
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
相关资源
最近更新 更多