传递空矩阵功能

时间:2016-03-22 17:33:19

标签: c++ pointers matrix

我试图将没有维度的矩阵传递给函数并填充数据。这是一个例子:

#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 你知道为什么吗?

2 个答案:

答案 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;
}