在CLion中调试时程序收到分段错误

我面临着实现单纯形方法(或单纯形算法)的挑战。单纯形法是基于重建矩阵的一种流行的线性规划算法。我的程序应返回最佳解决方案。我在Clion中有一个C ++项目。当我运行程序时,它可以正常工作,但是在调试过程中,在其中一种方法中,我收到了SIGSEGV信号(分段故障)。当我尝试为矩阵分配内存时会发生这种情况。这是代码的一部分:

double **newTable;
    newTable = new double *[rows];
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            newTable[i] = new double [cols];
        }
    }

我在方法末尾使用delete []释放了内存,但是它不起作用。 我已经尝试过在另一个IDE(CodeBlocks)中运行该程序,但是它也可以正常运行,我也不知道为什么会发生该问题以及在哪里发生该问题。

QQ516061641 回答:在CLion中调试时程序收到分段错误

不需要此嵌套循环。您只需要一个循环即可为这个锯齿状的数组分配内存:

int main() {
    int rows = 5,cols = 10;
    double **newTable;
    newTable = new double *[rows];
    for (int i = 0; i < rows; ++i) 
        newTable[i] = new double[cols];

    for (int i = 0; i < rows; ++i)
        delete newTable[i];
    delete newTable;
}

您的代码现在的方式将泄漏内存,但是仅此一项不会导致分段错误。您释放内存的方式也可能有误。


而且,由于这是C ++,我是否可以建议使用std::vector代替?

#include <vector>
int main() {
    std::vector<std::vector<double>> newTable(5,std::vector<double>(10));
}
本文链接:https://www.f2er.com/3021532.html

大家都在问