Я написал фрагмент кода C ++ для соединения с RFID-ридером, используя LLRP API в системе CentOS 7 (64-битная версия), и он работал отлично. Я взял этот самый файл .cpp и скопировал его на мой рабочий стол Ubuntu 14.04 (в том числе 64-битный), и после «make» -ing файл успешно запускается.
Проблема возникает, когда я пытаюсь отредактировать файл .cpp. Даже вставка или удаление одного символа / пробела / комментариев приводит к «ошибке сегментации (дамп ядра)».
Файл .cpp может быть успешно сохранен и скомпилирован с помощью команды "make" после редактирования, но при запуске исполняемого файла с использованием ошибки ./ происходит сегментация.
Я использую простой gedit и vim ничего больше. Я предполагаю, что проблема связана с тем, как обе операционные системы обрабатывают текстовые символы. Любые подсказки?
Больше наблюдений ---
В соответствии с предложениями я попытался удалить все коды и оставил только -
int main()
{
}
И код успешно запущен. Так в чем же может быть проблема сейчас?
* ПОДРОБНЕЕ *
Following is the code snippet that is under suspicion -
/*
* Check to make sure the message is of the right type.
* The type label (pointer) in the message should be
* the type descriptor for READER_EVENT_NOTIFICATION.
*/
if(&CREADER_EVENT_NOTIFICATION::s_typeDescriptor != pMessage->m_pType)
{
goto fail;
}
printf("Hello from check\n");
/*
* Now that we are sure it is a READER_EVENT_NOTIFICATION,
* traverse to the ReaderEventNotificationData parameter.
*/
pNtf = (CREADER_EVENT_NOTIFICATION *) pMessage;
printf("Hello from check 2\n");
printf("Hello from check 3");
pNtfData = pNtf->getReaderEventNotificationData();
if(NULL == pNtfData)
{
goto fail;
}
Вывод -
2902Z-001 / RFID / пример # ./example1 -v 169.254.209.30 124 5 ИНФОРМАЦИЯ:
Подключение к 169.254.209.30 .... 6 7 ИНФОРМАЦИЯ: Подключен, проверка
status .... 8 9 Привет из проверки Привет из проверки 2 Ошибка сегментации
(ядро сброшено)
Итак, существует определенная проблема между «Привет чек 2» и «Привет чек 3»
Это случай возможного переполнения буфера?