这是一个相关的帖子这一个,因为它使用相同的程序交易,但现在我实现了它的迭代,并不再递归的,但我仍然得到SIGSEGV(但后来)运行程序时.我对我的程序进行了一些其他更改以缩小范围,我认为将对象向量更改为ptr向量到堆上的对象确实给了我一些额外的回合(大约200),但仍然崩溃.我建议以某种方式保存程序中的变量的内存耗尽,但是当我转储程序的堆栈大小时:
rlimit rlim;
getrlimit(RLIMIT_STACK,&rlim);
std::cout << "rlim_cur ist:" << rlim.rlim_cur << std::endl;
std::cout << "rlim_max ist:" << rlim.rlim_max << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出是:
rlim_cur ist:8388608
rlim_max ist:18446744073709551615
Run Code Online (Sandbox Code Playgroud)
这似乎是相当大,并没有用尽,是否有任何其他相关限制转储,以进一步缩小我的问题,并希望解决它?
这里调试器的转储:
Program received signal SIGSEGV, Segmentation fault.
0x000000000040b2a0 in Town::get_cur_capacity (this=0x0) at ./solver/Darstellung.cpp:98
98 return left_over_capacity;
(gdb) backtrace
#0 0x000000000040b2a0 in Town::get_cur_capacity (this=0x0) at ./solver/Darstellung.cpp:98
#1 0x000000000040b9ab in Town::compare_by_capacity (eins=0x0, zwei=0x0) at ./solver/Darstellung.cpp:135
#2 0x00000000004124c7 in std::__move_median_first<__gnu_cxx::__normal_iterator<Town**, std::vector<Town*> >, bool (*)(Town const*, Town const*)> (__a=..., __b=..., __c=...,
__comp=0x40b98e <Town::compare_by_capacity(Town const*, Town const*)>) …Run Code Online (Sandbox Code Playgroud)