Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 17

Докажите, что призраков не существует! Seg fault

16.12.2013, 19:35. Показов 1192. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, у меня есть метод вида
C++
1
2
void  method(uint8_t *cmd, uint64_t var, uint32_t *a_var){
uint32_t i = *a_var;
и код, который его вызывает:

C++
1
2
3
4
5
6
7
uint32_t            any_var;
uint64_t            vars;
uint8_t             any_buffer[ANY_LEN];
 
 
any_var = ANY_VALUE;
method(any_buffer, vars , &any_var);

В результате на первой же строчке выполнения метода (uint32_t i = *a_var; ) выпадает кордамп. Посмотрел кору через gdb и вот что вижу. адрес переменной any_var и значение указателя a_var различное, а именно &any_var = 0xbf9f473c a_var = 0x2757ae49 .

Кто может помочь в чем проблема? все запускается на виртуальной 32-х битной убунте. Исключаю что кто-то написал в стек, т.к. проблема воспроизводится в 100% и всегда в одном и том же месте.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2013, 19:35
Ответы с готовыми решениями:

seg. fault
Подскажите пожалуйста как на ассемблере можно написать код приводящий к seg. fault? И как можно обрабатывать такие случаи?

Докажите, что не существует гомеоморфизма между данными пространствами
Докажите, что не существует гомеоморфизма между пространствами и [0,1) с топологиями, индуцированными топологией прямой.

Докажите, что существует вычислимая функция, удовлетворяющая данному условию
Здравствуйте, тебуется решить две задачи. Докажите, что существует вычислимая функция, которая совпадает с любой другой вычислимой...

13
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.12.2013, 21:24
скорее всего вы передаете не то. ищите очепятки и т.п.
0
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 17
17.12.2013, 11:36  [ТС]
Цитата Сообщение от retmas Посмотреть сообщение
скорее всего вы передаете не то. ищите очепятки и т.п.
Уж точно не опечатка, т.к. вывод в соответствующих фремах gdb такой:

(gdb) p &any_var
$2 = (uint32_t *) 0xbf9f473c

А в фрейме внутри метода:

(gdb) p a_var
$10 = (uint32_t *) 0x2757ae49


т.е. получается, что параметр в стеке имеет другое значение. Стек не глубокий, вот я и весь в раздумьях((((
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
17.12.2013, 12:58
igormat, приведите работающий код (желательно краткий), воспроизводящий ошибку, а также опции компиляции и версию компилятора. Иначе разговор ни о чем.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.12.2013, 16:14
Не видя целого кода, можно только гадать, где же накосячил афтор (хотя он подозревает, что проблема в компиляторе, в операционке или где-то ещё). Скорее всего в точке вызова функции не было прототипа или он был некорректный, но руку на отсечение не дам, т.к. мало информации.

P.S. То, что призраков не существует, надо воспринимать как данность. Если ты видишь призраков, значит ты глючишь
0
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 17
17.12.2013, 17:33  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Не видя целого кода, можно только гадать, где же накосячил афтор (хотя он подозревает, что проблема в компиляторе, в операционке или где-то ещё). Скорее всего в точке вызова функции не было прототипа или он был некорректный, но руку на отсечение не дам, т.к. мало информации.

P.S. То, что призраков не существует, надо воспринимать как данность. Если ты видишь призраков, значит ты глючишь
1) код выложить не смогу он слижком уж большой
2) операционку и компилятор я не валю, где я об этом говорил? ткните пальцом в мои слова


Я не прошу сказать где именно косяк, для этого у меня своя голова есть. Вопрос в том в каких ситуациях значение параметра, передаваемого в стек может быть измененно/некорректно, кроме ситуации, когда в процессе кто-то гадит в стек. Как видно из первого сообщения типы переменных, прототипы функций корректны, это первое, что я проверил и перепроверил.
0
 Аватар для Dizark
25 / 25 / 16
Регистрация: 12.04.2013
Сообщений: 85
17.12.2013, 17:59
У меня была подобная проблема, связанная с выравниванием.

т.е. если какую-то область памяти объявляем структурой, то при использовании полей размером больше байта, необходимо использовать атрибут пакед
C
1
2
3
4
5
typedef struct any {
     u_int8_t field1;
     u_int16_t field2 __attribute__ ((packed));
     u_int32_t field3 __attribute__ ((packed));
} any_t;
не знаю, применимо ли это к данной ситуации, у меня была проблема в том, что 32битное число неправильно считывалось, а ошибка сегментации была как следствие.
0
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 17
17.12.2013, 18:02  [ТС]
Dizark, спасибо, проверю.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.12.2013, 18:25
Цитата Сообщение от igormat Посмотреть сообщение
2) операционку и компилятор я не валю, где я об этом говорил? ткните пальцом в мои слова
Я сделал такой вывод из названия темы. Прости, если ошибаюсь

Цитата Сообщение от igormat Посмотреть сообщение
Вопрос в том в каких ситуациях значение параметра, передаваемого в стек может быть измененно/некорректно, кроме ситуации, когда в процессе кто-то гадит в стек
Один пример привёл - ошибка с прототипом.

Цитата Сообщение от igormat Посмотреть сообщение
Как видно из первого сообщения типы переменных, прототипы функций корректны, это первое, что я проверил и перепроверил.
Из первого сообщения это ни разу не видно. Например, нигде не сказано, что метод и точка вызова находятся в одном файле. А если они в разных файлах, то 100 раз перепроверить не всегда поможет.

Тебе уже сказали, что не видя исходников, тут и предположить-то почти нечего. Ты вроде бы не дурак, должен понимать, что ты пришёл за помощью, а потому должен оказать содействие. Если тебя просят показать исходники, значит не просто так просят

Добавлено через 40 секунд
Цитата Сообщение от Dizark Посмотреть сообщение
У меня была подобная проблема, связанная с выравниванием
Тут ведь нет никаких структур
0
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 17
18.12.2013, 18:11  [ТС]
ошибка оказалась смешной)))) все файлы были не в линуксовом формате, почему компилятор их съел и такая ошибка вышла я так и не понял.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.12.2013, 18:48
Что такое "не в линуксовом формате"?
0
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 17
18.12.2013, 18:55  [ТС]
в досовском, там символ окончания строки другой
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.12.2013, 19:03
И каким же это образом кодировка переноса строки влияет на правильность выполнения?
0
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 17
18.12.2013, 19:05  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
И каким же это образом кодировка переноса строки влияет на правильность выполнения?
Ну я же написал, что без понятия. Но вот помогло. По идее, вообще компилироваться не должно было.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.12.2013, 19:05
Помогаю со студенческими работами здесь

Докажите что не существует графа, в котором все вершины - точки сочленения
Помогите пожалуйста, дорогие эксперты с теорией!!! 1: Докажите что не существует графа, в котором все вершины - точки сочлинения 2:...

Докажите, что существует вид транспорта, которым можно доехать из любого города страны в любой другой
В одной стране каждая пара городов соединена только одним транспортным маршрутом: или железнодорожным, или автобусным. Докажите, что...

Segmentation fault. Что делать?
Добрый день, уважаемые форумчане. Написал программу, но при запуске получаю Segmentation fault. Пробежался по коду - вроде бы в...

Shell выдает ошибку то что "Файл не существует" когда он на самом деле существует
Shell выдает ошибку то что "Файл не существует" когда он на самом деле существует. Уже проверял файл реально существует но команда Shell...

Докажите, что cosB=tg(A/2)
В правильной четырехугольной пирамиде плоский угол при вершине равен А, а двугранный угол при основании равен В. Докажите, что cosB=tg(A/2)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru