Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с ООП Access Violation


Rembo ©   (2009-04-27 02:07:00) 

Сделал класс, несколько методов, куча переменных.
Сделал штук 50 экземпляров его, все норм работало, но в какой то момент появилась аномалия:
myclass1:=TMyClass.Create;
myclass1.var1:=1;
myclass1.method1;
myclass1.var2:=5;<<<Access Violation Exception!!!
Но! Если не выполнять метод method1 или после него заново инициолизировать класс ошибки не будет.
Так же этот глюк возникает не у всех экземпляров. Появление ошибки зависит от порядка объявления экземпляров, но как именно я не понял.
Еще могу сказать что в method1 вызываеться функция из дллки (directx), если ее убрать аномалия исчезнет.
Вот функция:
hret:=D3DXCreateTextureFromFileEx(FD3DDevice,PChar(fname),0,0,0,0,D3DFMT_A8R8G8B 8,D3DPOOL_MANAGED, D3DX_DEFAULT,D3DX_DEFAULT,0,inf,nil,tex);

hret возвращает что мол все ок.
Прошу помоч, а еще прошу не перенносить тему в "построение игр".
Заранее благодарен.


First blood   (2009-04-27 12:22:00) [1]


> Rembo   (27.04.09 09:22) [4]
> D3DXCreateTextureFromFileEx(....,@inf);
> Ну вот почему компилятор так просто все не объяснил

А это уже зависит от того как описана в хидере эта функция, а также думаю от настроек компилятора [x] Typed @ operator


Rembo   (2009-04-27 12:01:00) [2]

Так они отключаютсья?0о
Только что вернул все назад запустил, еррор, НИИДИНОГО ВАРНИНГА НЕБЫЛО!
[Hint] graph.pas(389): Value assigned to 'a' never used
[Hint] graph.pas(388): Value assigned to 'time' never used
[Hint] graph.pas(343): Variable 'xxx' is declared but never used in 'TTxt.inittxt'
[Hint] graph.pas(490): Variable 'I' is declared but never used in 'TSprite.send'
[Hint] graph.pas(490): Variable 'k' is declared but never used in 'TSprite.send'
[Hint] graph.pas(653): Variable 'i' is declared but never used in 'initbtns'
[Hint] graph.pas(663): Variable 'j' is declared but never used in 'graphinit'
[Hint] graph.pas(664): Variable 'k' is declared but never used in 'graphinit'


Anatoly Podgoretsky   (2009-04-27 11:20:00) [3]

> KSergey  (27.04.2009 10:50:05)  [5]

Лучше предположить, что warning-и просто не включены.


KSergey   (2009-04-27 10:50:00) [4]

> Rembo   (27.04.09 09:22) [4]
> Ну вот почему компилятор так просто все не объяснил

Что компилятор не объяснил? Формально код правильный.
Однако у меня сильное подозрение, что warning комилятор таки выкидывал, но кто ж их читает?


Rembo   (2009-04-27 09:22:00) [5]

Пасиб за помощь, проблему локализовал и решил вроде бы...
В D3DXCreateTextureFromFileEx использовалась запись inf типа   PD3DXImageInfo = ^TD3DXImageInfo;
и в методе я ее я так и назвал PD3DXImageInfo, а ща допер что создаю пустой указатель, передаю его в функцию и пытаюсь чето получить из него)
Решение:
inf:TD3DXImageInfo;
...
D3DXCreateTextureFromFileEx(....,@inf);
Ну вот почему компилятор так просто все не объяснил


First blood   (2009-04-27 02:54:00) [6]


> myclass1.var2:=5;<<<Access Violation Exception!!!

Проблема не здесь, это глюк встроенного отладчика.
Проблема при выходе из myclass1.method1;. Копайте её.


Германн   (2009-04-27 02:48:00) [7]

А сам код привести стесняешься?
аАи как?


Германн   (2009-04-27 02:45:00) [8]


>
> Rembo   (27.04.09 02:07)
>
> Сделал класс, несколько методов, куча переменных.
> Сделал штук 50 экземпляров его, все норм работало, но в
> какой то момент появилась аномалия:
> myclass1:=TMyClass.Create;
> myclass1.var1:=1;
> myclass1.method1;
> myclass1.var2:=5;<<<Access Violation Exception!!!
> Но! Если не выполнять метод method1 или после него заново
> инициолизировать класс ошибки не будет.
> Так же этот глюк возникает не у всех экземпляров. Появление
> ошибки зависит от порядка объявления экземпляров, но как
> именно я не понял.


Наверх

Титульная страница Поиск, карта сайта Написать письмо