2012-05-17 2 views
5

Я получаю странную ошибку seg, которая, кажется, происходит откуда-то не в моей программе ... явно не так. Я называю «strcmp» на двух массивах ... Оба массива хранятся в структурах того же типа. Я получаю в одном с точечной нотации и один через разыменования с «->»:Ошибка сегментации: «... нет такого файла или каталога»

int name = strcmp(one.name, two->name); 

Это компилируется нормально, но когда я запускаю его я получаю ошибку сегм. Я пробовал отслеживать его с помощью GDB, но когда я поставил контрольные точки непосредственно перед тем, где, по-моему, это должно произойти, это все равно. Я получаю:

Program received signal SIGSEGV, Segmentation fault. 
__strcmp_ia32() at ../sysdeps/i386/i686/multiarch/../strcmp.S:40 
40 ../sysdeps/i386/i686/multiarch/../strcmp.S: No such file or directory. 
    in ../sysdeps/i386/i686/multiarch/../strcmp.S 

FML. Предложения? Благодаря!

+1

Вы пытались выполнить обратную трассировку, когда она segfaults в gdb? –

+2

Что такое значение 'one.name',' two' и 'two-> name' в точке вызова? – Mud

+3

Вы столкнулись с ошибкой сегментации, а источник для 'strcmp' не существует в вашей среде. Когда система пытается найти его * после *, произошла ошибка seg. Источник не нужен, чтобы присутствовать, это стандартная функция библиотеки. Поэтому проблема заключается в том, что вы переписываете границы памяти в другом месте. Запуск вашей программы с помощью valgrind или инструмента анализа памяти должен дать точную информацию о том, где. –

ответ

2

Мое предложение: Скомпилируйте его с помощью -g и запустите его через valgrind.

Смежные вопросы