Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > WinAPI
Перезагрузить страницу Как исправить ошибки в программном коде
Закрытая тема
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
MoonChild MoonChild вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.07.2005
По умолчанию Как исправить ошибки в программном коде - 27.07.2005, 12:43

Очень странная ошибка!!
В основном потоке есть переменная типа char buf[MAX_PATH] в ф-ии Dlg_OnCommand. Я ею пользовался, но потом переместил код в которой она использовалась в другую ф-ию.
Переменная стала не нужна, и, соответственно, я ее удалил! И теперь код вторичного потока стал в разных местах под отладчиком выкидывать ошибки:
Код:
 
First-chance exception in Something.exe (NTDLL.DLL): 0xC0000005: Access Violation.
The program 'F:Win32 ProjectsSomething.exeDebug Something.exe .exe' has exited with code 0 (0x0).

Unhandled exception in Something.exe .exe (NTDLL.DLL): 0xC0000005: Access Violation
Я во вторичный поток через pvParam передаю адрес структуры. Работаю с ней и посылаю сообщения в первичный. И вот, сразу после посылки сообщения( то после первого, то после n, в зависимости от значения полей в этой структуре) поля структуры неожиданным
образом принимают непонятные значения!!
, и указатель, который есть в структуре начинает, соответственно, указывать на всякий мусор. Отсюда и ошибки. Но если оставить эту переменную, то все работает!!! На что она влияет, если я ее не использую?!!!
  (#2 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 27.07.2005, 13:13

Проблема не в этой функции. Твой код где-то "вылезает" по стеку и попадает на параметры функции (которые тоже передаются через стек). Когда ты добавляешь этот массив, твой код вместо параметров функции "наползает" на него.
Внимательно просмотри все места в функции, где работаешь с массивами с строками. Где-то происходит выход за границы.
Воспользуйся Bounds Checker'ом - он поможет тебе быстро найти это наползание.
  (#3 (permalink)) Старый
MoonChild MoonChild вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.07.2005
По умолчанию 27.07.2005, 13:42

Ссылочку не скинешь, pls?
  (#4 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 27.07.2005, 13:46

http://www.compuware.com/products/devpartn...tner/bounds.htm
  (#5 (permalink)) Старый
MoonChild MoonChild вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.07.2005
По умолчанию 27.07.2005, 15:53

Это "Request a risk-free, 14-day evaluation" качать?
Ads.
  (#6 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 27.07.2005, 15:55

Это триалка наверно. Крякнутую версию поищи самостоятельно.
У меня она лежит в локалке, так что линка дать не могу.
  (#7 (permalink)) Старый
MoonChild MoonChild вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.07.2005
По умолчанию 27.07.2005, 16:40

Т.е. когда переключаются потоки(их CONTEXT) они оставляют
свои переменные(локальные) в стеке, и появляется вероятность
другому потоку их потереть?

И сколько примерно весит Bounds Checker?
  (#8 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 27.07.2005, 16:43

Цитата:
Originally posted by MoonChild+-->
Цитата:
Т.е. когда переключаются потоки(их CONTEXT) они оставляют
свои переменные(локальные) в стеке, и появляется вероятность
другому потоку их потереть?
Нет. Скорее всего ты трешь стек внутри одной функции в одном потоке.

<!--QuoteBegin-MoonChild

[b]И сколько примерно весит Bounds Checker?
Не помню точно... Но немало...
Если есть возможность, лучше поищи на диске.
  (#9 (permalink)) Старый
MoonChild MoonChild вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.07.2005
По умолчанию 27.07.2005, 17:30

Так какая же тогда связь с переменной в другом потоке?
PS. Буду искать bound checker....
  (#10 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 27.07.2005, 17:35

Цитата:
Originally posted by MoonChild
[b]Так какая же тогда связь с переменной в другом потоке?
PS. Буду искать bound checker....
Прочитал внимательнее... Изначально не так понял.
Но смысл не меняется. Скорее всего где-то происходит наползание в стеке.
Удачи.
  (#11 (permalink)) Старый
MoonChild MoonChild вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.07.2005
По умолчанию 27.07.2005, 17:41

Спасибо!!
  (#12 (permalink)) Старый
SomewhereSomehow SomewhereSomehow вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.02.2004
По умолчанию 27.07.2005, 21:55

Оставь эту переменную =)))))))
Ads
  (#13 (permalink)) Старый
MoonChild MoonChild вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.07.2005
По умолчанию 27.07.2005, 23:55

:)
  (#14 (permalink)) Старый
MoonChild MoonChild вне форума
Member
 
Сообщений: 33
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.07.2005
По умолчанию 02.08.2005, 12:00

ААААА!!!!
Скачал Bound Checker, но он не особо помог...( может в setting'ах
что настроить? )

Функция потока через EAX передает себе адрес pvParam
и когда этой переменной нет, то ее адрес (содержимое EAX)
на 4 меньше, чем когда она есть - все летит на фиг!!

Помогите, pls... Какие нибудь возможные соображения....
(Код, вроде, ничего особенного)
  (#15 (permalink)) Старый
Omen Omen вне форума
Member
 
Сообщений: 467
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.05.2004
По умолчанию 02.08.2005, 14:28

Цитата:
Originally posted by MoonChild
[b](Код, вроде, ничего особенного)
Так вроде или ТОЧНО НЕТ НИЧЕГО ОСОБЕННОГО?
Ясно же, что трете стек. Добавленная переменная затирание принимает на себя и ошибки нет, т.к. она не используется. Смотрите внимательно код...
Закрытая тема

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как найти ошибки в программном коде NotFound Assembler 0 03.04.2011 11:57
Как исправить ошибки в программном коде Julia220992 Visual Basic 1 30.04.2010 22:09
Как исправить ошибки в программном коде imported_Witcher Lisp 1 06.06.2009 14:54
Исправление ошибки в программном коде berserker Вопросы начинающих программистов 1 11.01.2009 14:01
Как устранить ошибки в программном коде Наташа85 Java 2 04.12.2008 14:17
Как исправить ошибку в программном коде berserker Delphi 2 10.08.2007 15:19
Как исправить ошибки в программном коде _sg Lisp 0 29.07.2007 10:24
Как исправить ошибку в программном коде fikys Delphi 7 07.06.2007 15:28
Как исправить ошибку в программном коде costa WinAPI 1 21.02.2007 22:12
Как исправить ошибки в программном коде atomsk С/С++ 11 14.06.2005 04:38
Как найти ошибки в программном коде Regbist Assembler 6 04.05.2005 10:52
Как исправить ошибки в программном коде Belldandy Assembler 4 05.06.2003 07:09



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов