libfprint를 사용하여 C++에서 간단한 지문 스캐닝 프로그램을 작성하려고 시도하지만 간헐적으로 실행할 때 세그 폴트가 발생합니다. Valgrind는 오류가 fp_enroll_finger에 대한 호출에서 디버깅과 일관성이 있다고 말합니다.하지만이 오류의 원인을 전혀 알지 못합니다. 프로그램이 잘 돌아가는 경우도 있지만 프로그램이 실행될 때마다 일정 시간 동안 지속적으로 segfault하는 것으로 보입니다. 을 Heres 코드 :지문 호출로 인해 세그 폴트가 C++에서 발생합니다
#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;
}
fpdata에 데이터가 할당되어 있어야합니까? 또한 fpdev를 닫은 후에는 NULL로 설정하십시오. 그렇지 않으면,'fp_enroll_finger'가 1을 반환하지 않을 때 두번 닫을 것입니다. – jeffmagill