我在Ubuntu上使用Qt并进行一项需要多次执行程序的研究测试。我决定使用线程来优化时间消耗,但是当参数很大时我遇到了问题。首先我认为这是线程或对象编程的问题所以我决定简化事情以检测问题的根源。我找到了导致所有问题的功能。我把它放在main中并使用随机参数连续执行多次。它在146000-156000之间崩溃。 (为了确保我已经使用参数崩溃但是它正常执行的函数重新执行该函数。)
我注意到将参数对象作为全局变量可以改善时间(当2个对象是参数时为78000,当它们为全局时为大约150000),其他参数为简单整数
我使用了很多向量作为函数的局部变量,但我认为这不是原因,因为当函数完成处理时它们被破坏了。
这次崩溃的原因是什么?
for (int i=0;i<600000; i++){
int _trx=-1020+((rand())%2039);
int _try=-1020+((rand())%2039);
double _or=(rand()%36000)/100;
int _scale=rand()%2 -1 ;
std::cout << i <<": trans x: " << _trx << " | trans y: " << _try << " | or: " << _or << std::endl;
double _score= Test(1,_trx,_try, _or,1,0,5,5,1024);
cout <<" |score: " << _score << endl;
}
答案 0 :(得分:3)
每个人都知道,在大约50000个调用之后,C ++调用系统变得不可靠,你需要停止并启动另一个prorgam。
C ++函数调用可以正常工作。
重新阅读内容化这句话。在编程方面取得进步非常重要。
你需要解决的最大问题是我认为你的大脑内部而不是代码。如果您的第一次在您遇到问题时认为其他人的代码(例如编译器,操作系统)或硬件是您之所以不会走路的原因编程很远。
一旦您准备好接受您的代码,问题就会在提供源代码段的问题中添加更多信息,确切的错误消息,更多上下文。
从你提供的一些症状来看,我狂野的猜测就是内存泄漏,你的程序会因内存耗尽而死亡,但没有人真的可以在没有更多信息的情况下确定。