Сбой SIGILL с указателями на указатели - PullRequest
0 голосов
/ 06 октября 2011

У меня проблема с получением ошибки Sigill с некоторым кодом.

Полное сообщение об ошибке: Сигнал получен: SIGILL (?) С sigcode?(?) Из процесса:?

Я не уверен, почему это происходит сбой, но я подозревал, что это была проблема с памятью, связанная с неправильным использованием указателей на указатели и распределение.

Я делаю это правильно?

#define MAX_LIST 20
#define MAX_TEMPLATE_SIZE 1056
//CANDIDATE** candidate_list = new CANDIDATE*[MAX_LIST];
//for(int i = 0; i < MAX_LIST; i++)
    //candidate_list[i] = new CANDIDATE();

CANDIDATE** candidate_list = (CANDIDATE**) malloc(sizeof (CANDIDATE*) *MAX_LIST);
for(int i = 0; i < MAX_LIST; i++)
    candidate_list[i] = (CANDIDATE*)malloc(sizeof (CANDIDATE));

uint8_t* proprietary_template = (uint8_t*)malloc(sizeof(uint8_t)*MAX_TEMPLATE_SIZE);    
int error_code = 0;

ifstream in;
in.open("/root/filename.l1t", ifstream::binary);
in.read((char*)proprietary_template, MAX_TEMPLATE_SIZE);
in.close();

error_code = identify_template(proprietary_template, MAX_TEMPLATE_SIZE, MAX_LIST, candidate_list);          

Вот формат для функции определения шаблона.Как и определение КАНДИДАТА.Для моего параметра 'list' документы для этого состояния это массив указателей-кандидатов-кандидатов-длины.Кроме того, мне нужно выделить, но не инициализировать эту переменную.

int32_t identify_template(const uint8_t *identification_template,
                        const uint32_t identification_template_size,
                        const uint32_t candidate_list_length,
                        CANDIDATE * const *candidate_list);

typedef struct candidate
    {
        uint8_t         failed;
        uint32_t        template_id;    
        double          distance_score;
        double          probability;    
    }CANDIDATE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...