指纹调用会导致c+中的SEG错误+; 我试图用LIFFFLASH写一个简单的C++指纹扫描程序,但是运行时会断断续续地出现分段。Valgrind说错误出现在对fp_enroll_finger的调用中,这与我的调试一致,但是除此之外,我完全不知道是什么导致了这个错误。有些时候,程序运行正常,但有些时候,每当程序运行时,它似乎总是在一段时间内出现故障? 代码如下: #include <iostream> extern "C" { #include <libfprint/fprint.h> } using namespace std; fp_dev * fpdev; fp_print_data ** fpdata; bool createDevice(); int main(int argc, char **argv) { int r = fp_init(); if(r != 0) { return r; } while(createDevice()) { cout << "Scan right index finger" << endl; int enrollStatus = fp_enroll_finger(fpdev, fpdata); if(enrollStatus != 1) { cout << "Bad scan" << endl; fp_dev_close(fpdev); } else { cout << "Good scan" << endl; fp_print_data_save(fpdata[0], RIGHT_INDEX); break; } } if(fpdev != NULL) { fp_dev_close(fpdev); } fp_exit(); return 0; } bool createDevice() { fp_dscv_dev ** listOfDiscoveredDevs; fp_dscv_dev * discoveredDevice; listOfDiscoveredDevs = fp_discover_devs(); discoveredDevice = listOfDiscoveredDevs[0]; if(discoveredDevice != NULL) { cout << "Device found" << endl; fpdev = fp_dev_open(discoveredDevice); } else { cout << "No device found" << endl; return false; } fp_dscv_devs_free(listOfDiscoveredDevs); return true; } #包括 外部“C” { #包括 } 使用名称空间std; fp_dev*fpdev; fp\U打印数据**fpdata; bool-createDevice(); int main(int argc,字符**argv) { int r=fp_init(); 如果(r!=0) { 返回r; } while(createDevice()) { 您需要将fpdev和fpdata定义为: fp_dev * fpdev; fp_print_data * fpdata;

指纹调用会导致c+中的SEG错误+; 我试图用LIFFFLASH写一个简单的C++指纹扫描程序,但是运行时会断断续续地出现分段。Valgrind说错误出现在对fp_enroll_finger的调用中,这与我的调试一致,但是除此之外,我完全不知道是什么导致了这个错误。有些时候,程序运行正常,但有些时候,每当程序运行时,它似乎总是在一段时间内出现故障? 代码如下: #include <iostream> extern "C" { #include <libfprint/fprint.h> } using namespace std; fp_dev * fpdev; fp_print_data ** fpdata; bool createDevice(); int main(int argc, char **argv) { int r = fp_init(); if(r != 0) { return r; } while(createDevice()) { cout << "Scan right index finger" << endl; int enrollStatus = fp_enroll_finger(fpdev, fpdata); if(enrollStatus != 1) { cout << "Bad scan" << endl; fp_dev_close(fpdev); } else { cout << "Good scan" << endl; fp_print_data_save(fpdata[0], RIGHT_INDEX); break; } } if(fpdev != NULL) { fp_dev_close(fpdev); } fp_exit(); return 0; } bool createDevice() { fp_dscv_dev ** listOfDiscoveredDevs; fp_dscv_dev * discoveredDevice; listOfDiscoveredDevs = fp_discover_devs(); discoveredDevice = listOfDiscoveredDevs[0]; if(discoveredDevice != NULL) { cout << "Device found" << endl; fpdev = fp_dev_open(discoveredDevice); } else { cout << "No device found" << endl; return false; } fp_dscv_devs_free(listOfDiscoveredDevs); return true; } #包括 外部“C” { #包括 } 使用名称空间std; fp_dev*fpdev; fp\U打印数据**fpdata; bool-createDevice(); int main(int argc,字符**argv) { int r=fp_init(); 如果(r!=0) { 返回r; } while(createDevice()) { 您需要将fpdev和fpdata定义为: fp_dev * fpdev; fp_print_data * fpdata;,c++,segmentation-fault,fingerprint,C++,Segmentation Fault,Fingerprint,并将其用作: fp_enroll_finger(&fpdev, &fpdata); 当您不再需要fp数据时,也不要忘记使用fp\u print\u data\u free fp_dev * fpdev; fp_print_data ** fpdata; 一旦fp\u enroll\u finger尝试访问该位置,将创建两个指向随机内存位置并导致segfault的未初始化指针。 检查fp\u enroll\u finger返回值也很有用。需要上面的原因是指针(您的解决方案)不会

并将其用作:

fp_enroll_finger(&fpdev, &fpdata);
当您不再需要fp数据时,也不要忘记使用
fp\u print\u data\u free

fp_dev * fpdev;
fp_print_data ** fpdata;
一旦
fp\u enroll\u finger
尝试访问该位置,将创建两个指向随机内存位置并导致segfault的未初始化指针。
检查
fp\u enroll\u finger
返回值也很有用。

需要上面的原因是指针(您的解决方案)不会在内存中为任何内容分配任何空间。此解决方案分配内存,然后传递此内存的地址(创建指针)要使用的函数。fpdata是否需要为其分配数据?另外,在关闭fpdev后,将其设置为NULL。否则,当
fp\u enroll\u finger
不返回1时,您将关闭它两次。