|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.04.2017, 10:09 | #1 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
Помогите пожалуйста разобраться с указателями?
Код:
И второе почему pint равно 94, ведь оперативная память записывается через сегмент и смещение например 2345:3456 что обозначает это 94 и в каком сегменте памяти оно находится. Код пишу во FreeDos в BorlandC++3.1 (не эмулятор, чистый FreeDos 1.2 на винте, адреса памяти по идее должны выходить реальные) ______________________ Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум. Последний раз редактировалось Alex11223; 15.04.2017 в 12:23. |
15.04.2017, 10:32 | #2 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Черт его знает. В 16 битном режиме была хитрая арифметика указателей, там, помнится, были короткие указатели (которые только смещение, в текущем сегменте) и полные длинные (которые - реальный линейный адрес 32 бита).
Как и что у вас тут работает не понятно, потому что, давно забыто На линуксе запуск как ожидался: g++ tst1.cpp ./a.out pint a5663034, ival 400 вообще типы проверьте, х ожидает unsigned int, а вы ему int. Тут еще накладывается битовость, на досе инт может быть 16 бит. Последний раз редактировалось alexzk; 15.04.2017 в 10:37. |
15.04.2017, 12:34 | #3 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
Код:
|
15.04.2017, 12:36 | #4 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
линукс это все хорошо, но нужен чистый дос. А на unsigned ругается , говорит что не может сконвертировать указатель unsigned в int... а ну да указатель надо тоже в этот тип перевести наверно.
Последний раз редактировалось седьмой; 15.04.2017 в 12:40. |
15.04.2017, 12:51 | #5 | |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Цитата:
...насчет сегмента, если я верно помню, там в настройке проекта С++ есть "segmentation model", вот оно как раз и задает все с указателями - сколько вам памяти будет доступно и в какой модели(сегментированая или флэт). Но я уже лет 15 этого чуда не видел, могу помнить не верно. |
|
15.04.2017, 12:58 | #6 | |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Цитата:
Но, указатель, скорее всего у вас не 16 бит, как ожидалось. При разделении, все по прежнему работает не совсем верно Потому что, печатает только 16 бит от указателя, остальные в пролете. Скорее всего, указатель у вас там 2+2 = сегмент+смещение, вот их первый принт и печатал (и соотв, игнорировал ival) Последний раз редактировалось alexzk; 15.04.2017 в 13:02. |
|
17.04.2017, 07:07 | #7 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
я тоже этого чуда не видел давно, пока не пришлось переделывать под себя драйвер платы для согласования интерфейсов, заказчик предложил делать под досом из за достаточно малых временных интервалов, одно дело переделать драйвер на с++ под досом для платы на микроконтроллере и другое полноценный аппаратный драйвер по виндой, так в руках оказался проект под досом. Сейчас надо его не то что писать, а кое что удалить, кое что изменить, кое что проверить.
|
17.04.2017, 09:13 | #8 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
Спасибо всем за помощь. Вы оказались правы, взял не тот шаблон данных при выводе printf, нужно было брать формат указателя %p, а не числа, сейчас выходит все верно "3358:037C". Теперь остался совсем простой вопрос просто чисто формально, разделить отдельно сегмент и смещение нужно уже самому? Команды такой наверно нет на с++, можно наверно чисто через split или нечто подобное?
|
17.04.2017, 09:18 | #9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
|
17.04.2017, 10:40 | #10 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
Спасибо, попробую, а пока можно еще вопрос? Почему при запуске из разных оболочек изменяется сегмент памяти при запуске программы? И будет ли он один и тот же если его запускать всегда из одной программы, если количество программ на компьютере всегда одинаковое и комп под досом.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
помогите разобраться с указателями С++ | sasha_14-88 | Общие вопросы C/C++ | 1 | 07.12.2014 10:39 |
Помогите разобраться с указателями | igole | Общие вопросы C/C++ | 1 | 28.04.2013 16:47 |
Не могу разобраться с указателями | FRATER1234 | Общие вопросы C/C++ | 7 | 13.10.2011 11:23 |
Товарищи, помогите разобраться с указателями | scibern | Общие вопросы C/C++ | 7 | 11.01.2009 12:28 |
Помогите пожалуйста с динамической памятью и указателями | Riddick2013 | Помощь студентам | 1 | 19.12.2007 14:41 |