0

libfprint を使用して 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;
}
4

1 に答える 1