У меня проблема с получением ошибки 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;