2016-03-22 51 views
0

我试图将没有尺寸的矩阵传递给函数并填充数据。这里有一个例子:将空矩阵传递到函数

#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

什么语句错误节目吗? –

+1

调用'fun(矩阵)'不会以任何方式影响矩阵。搜索“按值传递参数”和“按参考”。 –

+0

在内部使用带'std :: vector'的'Matrix'类。 –

回答

0

首先,如果你有一个指针,它应该指向某个东西,所以为了不用警告就用nullptr初始化它。第二件事情是,你应该返回指针pointer.I固定代码,以便你可以看看你做出错误的,

#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; 
} 
0

你的程序失败,因为乐趣分配内存,但不会将新分配的矩阵数组返回给main。这将是更容易的返回值比参数来做到这一点:

double** fun() { 
    // ... 
    double** matrix = new double*[...]; 
    // ... 
    return matrix; 
} 

int main() { 
    double** matrix = fun(); 
    // ... 
} 

有100万其他方式来做到这一点(通过传递一个双***成趣,或参考,或使用某种对象等)。选择你最喜欢的任何东西。