Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Глупые вопросы часть 3 :) 30.10.02 19:13
Автор: PS <PS> Статус: Elderman
|
#include <stdio.h>
typedef void (*PROC)();
void main()
{
printf( "a" );
PROC p1;
p1 = (PROC)main;
// p1 = (PROC)0x401020;
p1();
}
---
на строчку p1 = (PROC)main; ставим точку останова. идем в дебагере. видим что main = 0x401020, а p1 (после присваивания) 0x40100a. Во как !
И это не понятно.
Но чудеса продолжаются: раскоментариваем строку p1 = (PROC)0x401020; и видим что программка все равно работает. ей пофиг чему будет равняться p1: 0x40100a или 0x401020 - чудеса...
|
|
Глупые вопросы часть 3 :) 05.11.02 13:12
Автор: SL Статус: Незарегистрированный пользователь
|
А ты в какой среде работал? Я например твой пример в Borland Builder посмотрел - там все корректно...
|
|
Глупые вопросы часть 3 :) 03.11.02 20:38
Автор: beetle <beetle> Статус: Member
|
а ты включи Disassembly - и потрассируй
может поможет =
|
|
Глупые вопросы часть 3 :) 01.11.02 10:36
Автор: Ultra Статус: Незарегистрированный пользователь
|
> > #include <stdio.h>
> typedef void (*PROC)();
>
> void main()
> {
> printf( "a" );
> PROC p1;
> p1 = (PROC)main;
> // p1 = (PROC)0x401020;
> p1();
> }
> ---
> > на строчку p1 = (PROC)main; ставим точку останова. идем в > дебагере. видим что main = 0x401020, а p1 (после > присваивания) 0x40100a. Во как ! > И это не понятно. > Но чудеса продолжаются: раскоментариваем строку p1 = > (PROC)0x401020; и видим что программка все равно работает. > ей пофиг чему будет равняться p1: 0x40100a или 0x401020 - > чудеса... Зря ты так над С эксперементируешь, это тебе не асм, тут все намного сложнее, ведь это алгоритмический язык программирования.
А на счет твоей проги, я немного не понял, инфы мало. Если ты компилишь прогу под виньдовз, то почитай exe`шный фал в Hex`e и все поймешь. Просто виндовские проги начинают работать где-то с середины кода....
Я тоже сталкивался с такой проблеммой, и мне объяснили ее так.
|
|
там просто jmp стоит 30.10.02 19:34
Автор: ggg <ggg> Статус: Elderman
|
|
| |
А как объяснить разные значения после операции = ? 30.10.02 19:38
Автор: PS <PS> Статус: Elderman
|
|
| | |
значит дебагер и компилятор разные из двух значений используют 30.10.02 19:57
Автор: ggg <ggg> Статус: Elderman
|
дебагер тебе показывает саму main
а компилер присваивает адрес jmp
|
|
|