在生成文件外运行应用程序时出现分段错误



我有一个程序,我只能从Makefile运行它,否则它会给我这个错误:

分段故障(核心转储)

但是如果我从Makefile运行应用程序,那就没问题了。我简化了我的代码:

这是我的制作文件:

all: 
    g++ aaa.cpp
run:
    ./a.out

这是我的代码:

#include <iostream>
#include <armadillo>
class CModel
{
public:
    arma::mat::fixed<5,10000000> buffer;
};

int main()
{
    CModel m1, m2;
    std::cout<<"run successfully"<<std::endl;
    return 0;
}
当它不在makefile中

时,这似乎是内存占用的问题,但是当它在makefile中时,它为什么会起作用?

$ make
g++ aaa.cpp
$ make run
./a.out
run successfully
$ ./a.out
Segmentation fault (core dumped)

附加信息:

操作系统: Linux (Ubuntu)

要使用犰狳矩阵库:

sudo apt-get install libarmadillo-dev
我没有

犰狳,所以我无法测试你的代码。但是,通过查看它,我猜您有一个堆栈溢出。这是分段错误的特定时间。

分割错误来来去去的情况并不少见,这取决于程序的运行方式(以及星星的位置等)。

尝试减小堆栈的大小。尝试:

arma::mat::fixed<5,1000> buffer;

而不是:

arma::mat::fixed<5,10000000> buffer;

或者,如果它确实必须达到该大小,请将其放在堆上而不是堆栈上(使用new/delete)。高内存使用率实例不应位于堆栈上,而应始终位于堆上。

使用堆而不是堆栈:

int main()
{
    CModel *m1 = new CModel;
    CModel *m2 = new CModel;
    std::cout<<"run successfully"<<std::endl;
    delete m1;
    delete m2;
    return 0;
}

当然,你需要使用 m1->SomeMember 而不是 m1。某会员

相关内容

  • 没有找到相关文章

最新更新