c++ - Ubuntu 上的段错误(核心转储)与 C++ 上的矩阵函数

标签 c++ matrix segmentation-fault dynamic-allocation

我正在尝试用 C++ 构建一个程序,该程序可以大量处理矩阵和矩阵函数。我的代码编译正常,但当我尝试执行它时,我收到消息:

段错误(核心已转储)

我的代码有很多功能,如下所示:

void function(double **matrix, ...) {
    //Operations with the matrix
}

我这样调用函数:

double **M;
function(M,...);

通过研究消息,我发现我需要动态分配我将要使用的矩阵,因此编写了以下函数来执行此分配:

void allocMatrix(double **M, int nl, int nc) {
M = new double*[nl];
for(int i = 0; i < nl; ++i)
        M[i] = new double[nc];
}

void freeMatrix(double **M, int nl) {
for(int i = 0; i < nl; ++i)
         delete [] M[i];
delete [] M;
}

现在有了这些函数,我尝试调用我的其他函数来执行以下操作:

double **M;
allocMatrix(M, numberOfLines, numberOfColumns);
function(M,...);
freeMatrix(M, numberOfLines);

但是,即使进行了此更改,我仍不断收到消息“段错误(核心已转储)”。

我什至试过像这样在函数内部分配矩阵:

void function(double **matrix, ...) {
    allocMatrix(M, numberOfLines, numberOfColumns);
    //Operations with the matrix
    freeMatrix(M, numberOfLines);
}

但效果不佳。

有谁知道我哪里做错了吗?

最佳答案

需要在参数列表中传入double ***,在调用中发送&M(M的地址)。否则,您的 M 就没有矩阵,并且您会在另一个函数中遇到段错误。

关于c++ - Ubuntu 上的段错误(核心转储)与 C++ 上的矩阵函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17033177/

相关文章:

linux - x86 GNU 汇编程序奇怪的更改段错误

c++ - 迷失在指针的世界里

c++ - 寻找迭代线性求解器的测试矩阵/系统

c++ - 缺少 XML 文件时 tinyxml2 上的段错误

javascript - 将 CSS Matrix3d 变换转换为欧拉 Angular

r - 在 R 中通过 cbind 合并相同大小的行

c 结构体和 pthread 指针分配

c++ - 使用 lambda 修改由打包参数标识的引用?

C++ 类返回具有新地址的引用

c++ - C++ 中用于对象构造的 ** 习语