Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
#1

Доступ к памяти по адресу - C++

29.07.2013, 13:31. Просмотров 1945. Ответов 42
Метки нет (Все метки)

Есть структура, элементы которой адрес на начало массива в памяти и его размер. Адреса хранятся в 16-ричном формате. Мне нужно распечатать то, что лежит в этом массиве.

C++
1
2
3
4
for (int i = 0; i <= ((int)(current->_size)); i++)
            {
                TraceFile << (current->_address)[i]<<endl;
            }
(current->_address)[i] - некорректно, не могу придумать, как сделать иначе
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2013, 13:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доступ к памяти по адресу (C++):

Доступ к произвольному адресу памяти - C++
Есть известный адрес в памяти с известным значением int Хотел бы проверить это значение после того как введу адрес памяти вручную. ...

Доступ к переменной по абсолютному адресу. - C++
Мне нужно обратится к ячейке памяти с известным конкретным адресом (это может быть вектор прерывания, переменная БИОС итд). Как это сделать...

Прочитать из памяти по адресу - C++
Задача: в памяти по адресу 0040:0010h (0x00400010) записано слово (информация о подключенном оборудовании). Нужно прочитать 12-й бит этого...

Данные по адресу памяти - C++
У меня есть адрес например 0x11E9B62C как узнать что по нему записанно?

Выделение памяти по известному адресу - C++
Всем привет. Вопрос сообственно в заголовке темы. Как выделить память по нужному мне адресу, например: Я хочу выделить память n*...

Взятие обьекта по адресу в памяти - C++
Допустим, я знаю что по адресу 0x13242341 находится произвольный обьект. Как возвратить указатель типа void на данный адрес Типо так?...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
29.07.2013, 14:18 #16
Цитата Сообщение от sly4ainaya Посмотреть сообщение
да, представляю, как глупо это выглядит, сейчас скажете мне обращаться к vars поиндексно, но мне так нельзя
почему? если других ошибок нет, то всё будет работать!
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:26  [ТС] #17
а я никак не инициализирую то, что хочу вывести (vars не в счет). Я хочу, зная начало блока памяти и его размер вывести все, что там лежит

Добавлено через 1 минуту
я пишу программку, которая отлавливает malloc и сохраняет его входное (размер массива) и выходное (адрес начала блока памяти) значения.. то что этот адрес сохранен в vars я не знаю как бы

Добавлено через 5 минут
Пока вывод такой
C++
1
2
3
4
5
6
7
for (int i = 0; i <= ((int)(current->_size)); i++)
{
    int * ptr;
    ptr = (int*)(current->_address);
    TraceFile <<(int)(*ptr)<<endl;
    current->_address++;
}
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
29.07.2013, 14:29 #18
current->_address какой тип имеет?
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:33  [ТС] #19
unsigned long long int
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
29.07.2013, 14:34 #20
Цитата Сообщение от sly4ainaya Посмотреть сообщение
unsigned long long int
что за ерунда? Разве это не указатель?
zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
29.07.2013, 14:37 #21
current->_address++;
это адрес +1 но не свиг указателя на sizeof(..)
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
29.07.2013, 14:37 #22
Цитата Сообщение от sly4ainaya Посмотреть сообщение
vars = (F_TYPE *)malloc(size);
кстати, это тоже неверно!
здесь надо
C++
1
vars = (int*)malloc(size*sizeof(int));
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:38  [ТС] #23
current указатель, да
поле address имеет тип unsigned long long int
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
29.07.2013, 14:38 #24
Цитата Сообщение от zybrzybr Посмотреть сообщение
current->_address++;
это адрес +1 но не свиг указателя на sizeof(..)
Именно что сдвиг на сайзоф, а не просто плюс один!
в этом и ошибка!
xanderfomin
40 / 37 / 8
Регистрация: 25.10.2012
Сообщений: 112
29.07.2013, 14:38 #25
Kuzia domovenok, что тебе не нравится? Я так понимаю, у sly4ainaya LLP64, т.е. указатель является 64-битным адресом.
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:42  [ТС] #26
да, у меня там так и сделано, просто сюда это решила не писать.. тогда наверное, нужно к адресу не 1, а 8 прибавлять

Добавлено через 1 минуту
я не понимать..

Добавлено через 33 секунды
на +8 ругается компилятор
xanderfomin
40 / 37 / 8
Регистрация: 25.10.2012
Сообщений: 112
29.07.2013, 14:42 #27
sly4ainaya, либо можешь считать свой адрес указателем на char и прибавлять единицу.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
29.07.2013, 14:42 #28
Цитата Сообщение от sly4ainaya Посмотреть сообщение
да, у меня там так и сделано, просто сюда это решила не писать.. тогда наверное, нужно к адресу не 1, а 8 прибавлять
1) адрес должен иметь тип int* тогда к нему надо прибавлять один.
2) если он имеет тип unsigned long long int то это странно, но можно наверное по 4 прибавлять, но лучше не надо.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.07.2013, 14:44 #29
если Вы пишете к адресу ++, то у тебяВас адрес увеличивается на sizeof(тип указателя), Вам собственно и надо выводить так в цикле, делая ++ на каждой итерации, не забывая разименовывать его, не удивлюсь если в выводе будет полный бред
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:45  [ТС] #30
в выводе как раз полный бред, да
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2013, 14:45
Привет! Вот еще темы с ответами:

Почему обращение к недоступному адресу в памяти - C++
Почему при проверке кода(компиляции) выскакивает сообщение :&quot;Недостаточный размер массивов или обращение по недоступному адресу в памяти&quot; ?...

Вызов функции-члена класса по адресу в памяти - C++
Всем хорошего дня :) Допустим, что где-то есть static функция, не принимающая аргументов и ничего не возвращающая. Имея один лишь...

Как сделать массив в памяти по фиксированному адресу? - C++
Есть микропроцессор, и в нем по жестко зафиксированному адресу находится массив ячеек. Допустим типа int. Как в Си мне организовать к нему...

Вызвано исключение по адресу 0x0FD466CB (ucrtbased.dll). Динамическое выделение памяти - C++
Проблема в динамическом выделении памяти. Функция multiply доходит до возвращения объекта и вылетает исключение. Если функция вернет просто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.07.2013, 14:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru