![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с ООП 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 или после него заново
> инициолизировать класс ошибки не будет.
> Так же этот глюк возникает не у всех экземпляров. Появление
> ошибки зависит от порядка объявления экземпляров, но как
> именно я не понял.