我试图将没有维度的矩阵传递给函数并填充数据。这是一个例子:
#include <iostream>
#include <stdlib.h>
using namespace std;
void fun(double **matrix);
int main(void)
{
double **matrix;
fun(matrix);
for(int i = 0; i < 10; i ++)
{
cout << "matrix = " << matrix[i][0] << "\t" << matrix[i][1] << endl;
}
}
void fun(double **matrix)
{
int rowCount = 10;
int colCount = 2;
matrix = new double*[rowCount];
for(int i = 0; i < rowCount; ++i)
matrix[i] = new double[colCount];
for(int i = 0; i < rowCount; i ++)
{
matrix[i][0] = 3.;
matrix[i][1] = 4.;
}
}
它编译但是当我执行它时,它返回以下错误: 非法指导:4 你知道为什么吗?
答案 0 :(得分:0)
您的程序失败,因为fun分配内存,但不会将新分配的矩阵数组返回给main。通过返回值比通过参数更容易做到这一点:
double** fun() {
// ...
double** matrix = new double*[...];
// ...
return matrix;
}
int main() {
double** matrix = fun();
// ...
}
还有其他一百万种方法可以做到这一点(通过将双***传递给乐趣,或引用,或使用某种对象等)。选择你最喜欢的东西。
答案 1 :(得分:0)
首先,如果你有一个指针它应该指向某个东西,所以为了没有警告只是用nullptr初始化它。第二件事是 应该返回 一个指向指针的指针。我修复了你的代码,这样你就可以看出你做错了什么,
#include <iostream>
#include <stdlib.h>
using namespace std;
double **fun(double **matrix);
int main(void)
{
double **matrix= nullptr;
matrix = fun(matrix);
for (int i = 0; i < 10; i++)
{
cout << "matrix = " << matrix[i][0] << "\t" << matrix[i][1] << endl;
}
getchar();
getchar();
}
double **fun(double **matrix)
{
int rowCount = 10;
int colCount = 2;
matrix = new double*[rowCount];
for (int i = 0; i < rowCount; ++i)
matrix[i] = new double[colCount];
for (int i = 0; i < rowCount; i++)
{
matrix[i][0] = 3.;
matrix[i][1] = 4.;
}
return matrix;
}