我有一个程序,我只能从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。某会员