Что такое SIGSEGV, ошибка сегментации в Qt
У меня есть программа Qt, которая отображает данные, которые она получает по UDP.
Он работает нормально около 30 секунд, но через некоторое время он дает ошибку сегментации и сбои. Эти 30 секунд также не исправлены.
Я использовал отладчик и получил следующее:
Program received signal SIGSEGV, Segmentation fault.
0x003c6fd4 in ?? () from /usr/lib/libQtGui.so.4
Может ли кто-нибудь сказать мне, где может быть ошибка?
Ответы
Ответ 1
Это означает, что ваша программа попыталась получить доступ к памяти, которая не принадлежит ей. В принципе, у вас есть указатель, который содержит недопустимое значение где-то в вашем коде. Общим источником этой ошибки является разыменование указателя NULL.
Ответ 2
Вам нужен отладчик (и убедитесь, что у вас есть двоичные файлы с информацией об отладке) - проверьте трассировку стека на месте сбоя. Я бы предпочел, чтобы ваш собственный код появлялся где-то, и с этого момента нужно начинать. Проверьте распределения, размеры буфера...
Ответ 3
Убедитесь, что вы выделили массив, которому вы назначаете данные.
У меня постоянно была эта ошибка для нераспределения.
Пример, который я использовал:
char* m_tempBuff;
*(int*) m_tempBuff = i;
Последнее изменилось, и оно сработало:
char m_tempBuff[sizeof(int)];
*(int*) m_tempBuff = i;
Удачи!:)