【问题标题】:C++ Dynamic Matrices Multiplying Return IssueC++ 动态矩阵乘法返回问题
【发布时间】:2014-09-22 19:23:33
【问题描述】:

我正在尝试乘以 n**x**n 个动态矩阵并返回它的结果。这是它的代码:

long long int** Multiply(long long int** m1, long long int **m2)
{
    static long long int** output;
    output= new long long int* [k];

    for (int i=0; i<k; i++)
        output[k]= new long long int [k];

    long long int cellRes= 0;
    for (int i=0; i<k; i++)
    {
        for (int f=0; f<k; f++)
        {
            for (int j=0; j<k; j++)
            {
                cellRes+= m1[i][j]*m2[j][f];
            }
            output[i][f]= cellRes;
            cellRes=0;
        }
    }

    return output;
}

它似乎在返回新矩阵方面做得很好,但由于某种原因,程序在执行 Multiply() 后崩溃......即使我创建一个新矩阵,分配它然后将 Multiply() 分配给它,它会崩溃。

我不知道我做错了什么。有什么想法吗?

【问题讨论】:

  • 为什么输出是静态的?使用vector&lt;vector&lt;long long int&gt;&gt;
  • 我在某处读到我必须将其声明为静态以避免引用不存在的内存位置。这就是我从:tutorialspoint.com/cplusplus/…
  • 第二次调用该函数时,它会覆盖第一次的输出,除非您记得复制它。要么提供输出矩阵作为另一个参数,要么使用向量并按值返回。
  • 所以 static 没有做任何事情?在我的特殊情况下,我只使用该函数一次,所以应该不会出错。
  • Static 使它成为一个在函数调用之间持续存在的全局变量。

标签: c++ pointers dynamic matrix alloc


【解决方案1】:
 for (int i=0; i<k; i++)
    output[k]= new long long int [k];

应该是:

 for (int i=0; i<k; i++)
    output[i]= new long long int [k];
         //^^^^ output[k] is out of bound and you allocate space for each row

【讨论】:

  • 你是上帝 d*** 对!这就是答案..它现在正在工作。现在我只需要确保将输出声明为静态不会成为问题...
猜你喜欢
  • 2023-03-03
  • 2018-01-27
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多