我有一个程序,我只能从Makefile
运行它,否则它会给我这个错误:
分段错误(核心转储)
但如果我从Makefile
运行应用程序,那就没关系了。我简化了我的代码:
这是我的make文件:
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)
其他信息:
OS:Linux(Ubuntu)
使用armadillo矩阵库:
sudo apt-get install libarmadillo-dev
答案 0 :(得分:1)
我没有犰狳,所以我无法测试你的代码。但是通过查看它,我猜你有堆栈溢出。这是分段错误的特定时间。
根据程序的运行方式(以及星星的位置等),分段故障的出现并不罕见。
尝试减小堆栈的大小。尝试:
arma::mat::fixed<5,1000> buffer;
而不是:
arma::mat::fixed<5,10000000> buffer;
或者如果确实必须将其放在堆而不是堆栈上(使用new / delete)。高内存使用情况实例不应该在堆栈上并且始终在堆上。
答案 1 :(得分:0)
使用堆而不是堆栈:
int main()
{
CModel *m1 = new CModel;
CModel *m2 = new CModel;
std::cout<<"run successfully"<<std::endl;
delete m1;
delete m2;
return 0;
}
当然,您需要使用m1-&gt; SomeMember而不是m1.SomeMember