Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Помогите разобраться с ошибкой.


Автор: GriKo 30.7.2003, 18:10
Пользую Borland'овский компиллер. Пишет что-то типа этого.

"Threat stopped c:\abc\i.exe: Fault:
access violation at 0x401500: read of
address 0x1b9c3d4"

В чем может быть проблема? Выскакивает когда я пытаюсь присвоить значение переменной типа long.

Автор: TaTaP 31.7.2003, 02:48
Типа мы тут не телепаты, можно кода поболее, а то как то невдомек, где и что у тебя происходит...

Автор: Kefir 31.7.2003, 07:47
по твоей фразе можно лишь сказать, что ты лезешь туда, куда тебе лезть нельзя smile.gif

Автор: RAN 31.7.2003, 08:21
Ошибка памяти небось. Ты её либо не выделил, либо уже освободил, а может просто пишешь *x = 0;, а в x байда всякая, типа 0x1b9c3d4.

Автор: GriKo 31.7.2003, 14:15
Код
long l;
//потом долгая лабуда высчитавания "присвояемого" значения, со всякоми ^,|,&,>>,<< и должно это всё присвоиться к l. Причём ошибка лезет даже не при присвоении, а если я пытаюсь просто вывести на экран.

l=T1[(( ((a & 0x00c00000) | ((a >> 1) & 0x07000000)) >> 1) | (a & 0x00100000)) >> 20] | T2[((a & 0x0001e000) | ((a >> 1) & 0x00060000)) >> 13] | T3[((a & 0xc0) | (l >> 1)) >> 6];


все Т1 и т.д. - это константные массивы размером 63 типа лонг, заполненые значениями вида "0х00с00421Э и т.д.

Автор: RAN 31.7.2003, 22:50
Цитата
long l;
//потом долгая лабуда высчитавания "присвояемого" значения, со всякоми ^,|,&,>>,<< и должно это всё присвоиться к l. Причём ошибка лезет даже не при присвоении, а если я пытаюсь просто вывести на экран.

l=T1[(( ((a & 0x00c00000) | ((a >> 1) & 0x07000000)) >> 1) | (a & 0x00100000)) >> 20] | T2[((a & 0x0001e000) | ((a >> 1) & 0x00060000)) >> 13] | T3[((a & 0xc0) | (l >> 1)) >> 6];

Вот это да, даже разбираться не буду, голову сломаешь. Короче, припиши это
int i1 = (( ((a & 0x00c00000) | ((a >> 1) & 0x07000000)) >> 1) | (a & 0x00100000)) >> 20;
int i2 = ......................

l = T1[i1] | T2[i2] | T3[i3]
Поставь breakpoint на int i1 = .... и пройдись, анализируя получаемые значения, или ещё лучше поставь бряк с условием, чтоб срабатывал только если i1-i3 больше 63 или меньше 0. Ошибка там - 97.5%

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)