递归函数中的Q向量崩溃随机性



我在使用QT创建者时遇到了一个奇怪的问题。我使用的是最新版本的qt-creator和Qvector函数(我也尝试过std::vector和同样的问题(在for循环中,我调用递归函数,例如:

void add(bool in){
global_var.push_back(in) //Qvector<bool>, global varible
return;
}
void start(int x,int y,int z){
for(int i=0;i<z;i++){
if(i<z){
add(true);
start(x,y,z);
start(x,y,z);
return;
}
}
add(false) 
}

然后应用程序在某个时候随机崩溃,我得到的唯一错误是:

Process:               FIRST_program [24565]
Path:                  /Users/USER/Downloads/*/FIRST_program.app/Contents/MacOS/FIRST_program
Identifier:            feri.FIRST_program
Version:               0
Code Type:             X86-64 (Native)
Parent Process:        Qt Creator [23775]
Responsible:           FIRST_program [24565]
User ID:               501
Date/Time:             2018-12-12 21:24:41.838 +0100
OS Version:            Mac OS X 10.14.1 (18B75)
Report Version:        12
Bridge OS Version:     3.0 (14Y667)
Anonymous UUID:        F7D655B5-7798-C8EF-925D-0F2BF1B2ABD3
Sleep/Wake UUID:       6384DE06-A77B-4893-9D81-3BC040DA989F
Time Awake Since Boot: 52000 seconds
Time Since Wake:       11000 seconds
System Integrity Protection: enabled
Crashed Thread:        0  Dispatch queue: com.apple.main-thread
Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_PROTECTION_FAILURE at 0x00007ffee4a8bff8
Exception Note:        EXC_CORPSE_NOTIFY
Termination Signal:    Segmentation fault: 11
Termination Reason:    Namespace SIGNAL, Code 0xb
Terminating Process:   exc handler [24565]
VM Regions Near 0x7ffee4a8bff8:
MALLOC_SMALL           00007f9884800000-00007f9885800000 [ 16.0M] rw-/rwx SM=PRV  
--> STACK GUARD            00007ffee128c000-00007ffee4a8c000 [ 56.0M] ---/rwx SM=NUL  stack guard for thread 0
Stack                  00007ffee4a8c000-00007ffee528c000 [ 8192K] rw-/rwx SM=SHM  thread 0
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   macbook.FIRST_program               0x000000010a97d690 QBasicAtomicInteger<int>::load() const + 16 (qbasicatomic.h:103)
1   macbook.FIRST_program               0x000000010a97f155 QtPrivate::RefCount::isShared() const + 21 (qrefcount.h:101)
2   macbook.FIRST_program               0x000000010a980d38 QVector<bool>::isDetached() const + 24 (qvector.h:106)
3   macbook.FIRST_program               0x000000010a981920 QVector<bool>::append(bool const&) + 64 (qvector.h:679)
4   macbook.FIRST_program               0x000000010a97b64d QVector<bool>::push_back(bool const&) + 29 (qvector.h:260)
5   macbook.FIRST_program               0x000000010a97afc8 MainWindow::add(bool) + 40 (mainwindow.cpp:204)
6   macbook.FIRST_program               0x000000010a97ae22 MainWindow::start(int, int, int, int) + 242 (mainwindow.cpp:132)
7   macbook.FIRST_program               0x000000010a97ae9b MainWindow::start(int, int, int, int) + 363 (mainwindow.cpp:139)
8   macbook.FIRST_program               0x000000010a97ae9b MainWindow::start(int, int, int, int) + 363 (mainwindow.cpp:139)
9   macbook.FIRST_program               0x000000010a97ae9b MainWindow::start(int, int, int, int) + 363 (mainwindow.cpp:139)
10  macbook.FIRST_program               0x000000010a97ae9b MainWindow::start(int, int, int, int) + 363 (mainwindow.cpp:139)
11  macbook.FIRST_program               0x000000010a97ae9b MainWindow::start(int, int, int, int) + 363 (mainwindow.cpp:139)
12  macbook.FIRST_program               0x000000010a97ae9b MainWindow::start(int, int, int, int) + 363 (mainwindow.cpp:139)
13  macbook.FIRST_program               0x000000010a97ae9b MainWindow::start(int, int, int, int) + 363 (mainwindow.cpp:139)

我建议您在QVector中使用append来添加元素,它等于pus_back,因为QVector通常会分配比所需更多的内存。

void add(bool in){
global_var.append(in) //Qvector<bool>, global varible
return;
}

和你的开始方法,将永远循环。如何调用start方法?z的值在每次调用中都不会改变,如果z=0,则条件不起作用。

那么,你真正想解决的问题是什么?

最新更新