![]() |
|
Модераторы: xvr |
![]()
|
|
| Fynivx |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
Здравствуйте. У меня тут совершенно сверхъестесвенная проблема - ошибка сегментирования при вызове XGetIconName.
В гдб я не силен, а в гугле ничего не нашел ( вы будете смеяться - 0 результатов на русских сайтах и 141 на англоязычных ). При вызове из main.cpp - происходит то же самое, что заставляет сомневаться в том, что это из-за такого стремного объявления переменных окна и дисплея. Еще более в этом заставляет сомневаться то, что вот это:
вполне работоспособный код. А одна-единственная XGetIconName вызывает ошибку сегментирования. Что я делаю не так? |
||||
|
|||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Третий параметр -- это char *, который должэн передаваться по ссылке.
|
|||
|
||||
| Fynivx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
Не вижу разницы. И компилятор тоже не видит - результат тот же - ошибка сегментирования.
(И в том и в другом случае передается указатель на указатель на чар, и работа идет со вторым указателем, а не с первым - ему выделяется память. И в документации, кстати, написано именно char**) --- Функция XFetchName, вызываемая таким же образом, вполне успешно работает. ЗЫ, я уже и сам пробовал память выделять под этот указатель, причем самыми изощренными способами - результат тот же. Это сообщение отредактировал(а) Fynivx - 21.1.2012, 00:43 |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Бывает. Что тут можно сказать -- учите C, он на самом деле не такой уж сложный. |
|||
|
||||
| Fynivx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
Ладно. Скажем так - разница есть, но для этого случая - нет.
Или в этот раз ошибка сегментирования по другой причине? ----- И, все-таки, объясните пожалуйста, какая разница, передать этой функции указатель инициализированный самолично, или указатель, определенный компилятором? Так. Я осознал свою ошибку - в моем случае память выделится для первого указателя, который будет указывать на хз. И если это хз изменится, будет хз что. А в Вашем - под этот указатель место выделяется, и его можно изменить без последствий. Но проблему это не решает. Это сообщение отредактировал(а) Fynivx - 21.1.2012, 01:25 |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Как минимум -- есть ещё ровно та жэ ошыбка в getTitle. Возможно, что что-то похожэе есть где-то ещё. Типичный паттэрн: первый раз разносит кучу (heap), затем мы валимся в (дажэ нормальном) malloc().
Впрочем, я практически не знаю v8 -- возможно, что какое-то из его применений неверно. И здесь, кстати, не весь код. Если исправление видимого не поможэт, попробуйте взять какой-нибудь malloc debugger, например electric-fence. А, и собирайте с g++ -Wall, кстати. И чтобы варнингов не было. |
|||
|
||||
| Fynivx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
Похоже, всё так(
Я в расстройстве чувств подключил GLUT для работы с окнами и.... Ошибка сегментирования в
Это кэллбэк для обработки стандартного ввода. Но он работал, пока я не подключил GLUT Буду рассматривать дамп в поисках кривых указателей =/ Это сообщение отредактировал(а) Fynivx - 21.1.2012, 05:52 |
|||
|
||||
| Fynivx |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
Так. Я убрал всё. Вообще всё. Осталась только инициализация и вот этот вот кэллбак. g++ -Wall не выдает ни одного предупреждения. Но она осталась(
В отчаянии, привожу весь оставшийся код полностью. main.h:
LibEventCallbacks.h:
main.cpp:
LibEventCallbacks.cpp:
Я понятия не имею, где ТУТ вообще может быть ошибка( |
||||||||
|
|||||||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
1) Ошыбки могут быть везде.
2) Меня несколько напрягает, что почти все переменные в иницыализацыи библиотек -- локальные, на стэке. Это можэт быть нормально, можэт нет -- в зависимости от библиотеки (я таки не знаю ни v8, ни libevent). 3) Я сейчас попробую посмотреть, реально ли валится, но, возможно, что до вечера не успею. |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Странное дело, у меня в той строке ошыбка была отнюдь не SEGFAULT, а компиляцыи: Script в Handle<script> должэн быть с большой буквы.
|
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Ну и да, перенос текста v8_init() в main() решыл вопрос.
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Подозреваю, что Handle<> и Persistent<> разновидности smart pointer'ов. Если это так, то валилось правильно - вы их внутри v8_init создали, а они при выходе из v8_init свое содержимое разрушили. На чам потом работала ваша программа - одному богу известно |
|||
|
||||
| Fynivx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
Хех) Да, именно так и есть) Всем спасибо, проблема решена)
Ну, а первая проблема была по похожей причине. Контекст объявлялся глобально, в связи с чем v8 не мог его инициализировать, но использовал - вот вам и ### =/ Иногда, чтобы понять ошибки, нужно просто поспать) ---------- Я спокоен. Я совершенно спокоен. Ошибка никуда не исчезла. Да - скорее всего дело в этих указателях. Всё, что я добавил:
Но я в их определении никакой ошибки не вижу. Я даже здесь отдельный контекст сделал, чтобы глюков не было. Придется учиться юзать мтрэис, судя по всему( Это сообщение отредактировал(а) Fynivx - 21.1.2012, 17:20 |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Вы опять создали некий контекст на стэке (и кучу других каких-то объектов), отдали всё это v8, после чего ушли с этого стэк-фрэйма. Ошыбка можэт быть и не здесь, но кидаться в такие действия в настоящее время несколько опрометчиво.
|
|||
|
||||
| Fynivx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 13.8.2011 Репутация: нет Всего: 1 |
Все объекты созданные здесь, должны быть недоступными вне функции. Правильно?
По-этому я создал контекст именно здесь, чтобы он мог обработать полученные данные. Но проблема в том, что и с ним, и без него - результат такой же. Это и естественно - ведь контекст, работающий в области видимости main() объявлен как Persistent, а значит - должен быть доступен отовсюду ( что, кстати, и происходит - раньше это дело вполне себе работало, и из консоли были доступны все функции, которые я подключал к контексту в main() ). А то, что даже при перекрытии его новым контекстом ошибка остается, по-моему, говорит о том, что глюк с указателем у меня до вызова Run и в области, которую обрабатывает Compile. Хм... Если быть точным, сама ошибка происходит тогда, когда v8 сам обрабатывает ошибку компиляции. Есть над чем подумать. И вот, кстати, код функций, которые я забыл скинуть в прошлом посте.
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |