crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Q_INVOKABLE - переполнение буффера 0_0
sidsukana
  опции профиля:
сообщение 20.12.2011, 20:39
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


В общем такая история:
Месяц назад прогал на винде (Win7 x64) на 2008 студии Qt 4.7.4. В проекте использовал Q_INVOKABLE макрос для вызова методов через их строковый эевивалент.
Все работало нормально. Затем месяц сидел на линуксе, переводил проект под него. Сейчас снова вернулся на винду - получаю переполнение буфера после завершения Q_INVOKABLE метода.
В принципе до линукса у меня только пару функций было таких, а на лине я добавил еще множество. Но факт фактом что на лине это множество методов работало как часы. На винде получаю краш на переполнении буфера. При отладке все происходит именно после завершения выполнения метода.
На винде юзаю VS. Никто не сталкивался? Отключать в свойствах проекта проверку на переполнение буфера это не тру, хочу докопаться до истины.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 21.12.2011, 6:26
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


в отладчике надлежит поймать проблемное место, затем показать код )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 21.12.2011, 9:13
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Ну проблемное место это любая invokable функция.

// handler[i].method - char* название функции
QMetaMethod method = metaObject()->method(metaObject()->indexOfMethod(handler[i].method));

// метод в этом же объекте, поэтому this

                if (!method.invoke(this)) // вот - после того как функция выполнится и завершается, происходит краш.
                {
                    ...
                }


Функция большая, да и думаю нет смысла выкладывать, в ней все нормально работает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 21.12.2011, 11:30
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Цитата(sidsukana @ 21.12.2011, 10:13) *
Функция большая, да и думаю нет смысла выкладывать, в ней все нормально работает.


А если метод с пустой реализацией, тоже происходит краш ?

Если нет, то проблема в реализации самого метода, возможно, внутри не корректно изменяется объект this.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 21.12.2011, 13:16
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Цитата(ssoft @ 21.12.2011, 14:30) *
Цитата(sidsukana @ 21.12.2011, 10:13) *
Функция большая, да и думаю нет смысла выкладывать, в ней все нормально работает.


А если метод с пустой реализацией, тоже происходит краш ?

Если нет, то проблема в реализации самого метода, возможно, внутри не корректно изменяется объект this.


Хм. Проверю отпишусь. Но ведь на линуксе все нормально работало.

Не крашит. Что ж буду смотреть что я там не так наделал что msvc не хочет хавать это))) хотя по опыту обычно gcc не хавает))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 17:06