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