Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
1

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

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

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

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

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

Доступ к переменной по абсолютному адресу.
Мне нужно обратится к ячейке памяти с известным конкретным адресом (это может...

Прочитать из памяти по адресу
Задача: в памяти по адресу 0040:0010h (0x00400010) записано слово (информация о...

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

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

42
Kuzia domovenok
2324 / 2072 / 481
Регистрация: 25.03.2012
Сообщений: 7,395
Записей в блоге: 1
29.07.2013, 13:33 2
Цитата Сообщение от sly4ainaya Посмотреть сообщение
Адреса хранятся в 16-ричном формате.
Это как?
1
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 13:36  [ТС] 3
0x1bc9010 ну так, например..
0
Kuzia domovenok
2324 / 2072 / 481
Регистрация: 25.03.2012
Сообщений: 7,395
Записей в блоге: 1
29.07.2013, 13:50 4
Цитата Сообщение от sly4ainaya Посмотреть сообщение
0x1bc9010 ну так, например.
с чего это ты взял?
адреса хранятся как адреса - 4 байта в win32. А присваивать им можно значения в любом формате:
C++
1
2
3
4
int* ptr;
ptr=(int*)0xcdcdcdcd;//16ричная константа
ptr=(int*)1234;//10ичная константа
ptr=(int*)012;//8ричная константа
1
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 13:51  [ТС] 5
пишут про некоторый оператор at, например, at(0x60)
но у меня компилятор ругается на такую попытку
0
Kuzia domovenok
2324 / 2072 / 481
Регистрация: 25.03.2012
Сообщений: 7,395
Записей в блоге: 1
29.07.2013, 13:55 6
Ты скажи, чё те надо то?

Добавлено через 2 минуты
больше кода!
1
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:02  [ТС] 7
у меня структура, я храню адреса именно так

надо пробежаться по куску памяти и распечатать, что там хранится. Я знаю начало этого куска памяти и его размер

Добавлено через 5 минут
а, спасибо я поняла, по-моему, как надо
0
Kuzia domovenok
2324 / 2072 / 481
Регистрация: 25.03.2012
Сообщений: 7,395
Записей в блоге: 1
29.07.2013, 14:04 8
больше кода!
распечатать, что хранится в структуре так что ли?
C++
1
2
3
4
5
6
7
8
struct info{
 int value1;
 char value2;
 double value3;
};
void Print(ofstream& TraceFile, struct info& data){
  TraceFile<<data.value1<<data.value2<<data.value3;
}
Так что ли? При чём тут адреса?
1
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:08  [ТС] 9
или не поняла.. я сделала так
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++;
            }
и получился какой-то бред, у меня совсем другие значения хранятся, а не те, что вывелись в файл
0
Fintt
10 / 10 / 2
Регистрация: 13.02.2012
Сообщений: 94
29.07.2013, 14:09 10
sly4ainaya, напиши что тебе нужно от начало и до конца +код.
1
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:10  [ТС] 11
нееет не то, что хранится в структуре.

У меня есть структура, содержащая адрес начала и количество элементов, которое нужно считать. Я хочу пробежаться по всем элементам от (начала адреса) до (начало адреса) + (размер)
0
Kuzia domovenok
2324 / 2072 / 481
Регистрация: 25.03.2012
Сообщений: 7,395
Записей в блоге: 1
29.07.2013, 14:11 12
Цитата Сообщение от sly4ainaya Посмотреть сообщение
содержащая адрес начала
начала чего?
код весь показывай! Особенно то, как ты инициализируешь то, что хочешь вывести!
1
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:14  [ТС] 13
ну вот например, я выделяю память
C++
1
 vars = (F_TYPE *)malloc(size);
в vars хранится адрес на начало блока памяти размером size. Я сохранила этот адрес и размер, потом поработала с памятью и теперь хочу получить то, что там лежит
0
zybrzybr
18 / 17 / 0
Регистрация: 29.09.2010
Сообщений: 156
29.07.2013, 14:16 14
структуру напиши.
адреса представлены как указатель на массив, и ты хочешь побайтно побжаться по нему?
1
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:18  [ТС] 15
да, представляю, как глупо это выглядит, сейчас скажете мне обращаться к vars поиндексно, но мне так нельзя

Добавлено через 55 секунд
Структура такая. Там еще поле для подсчета контрольных сумм
C++
1
2
3
4
5
6
7
8
9
typedef struct ForMemory
{
    int _size;
    unsigned long long int _address;
    unsigned int _crc;
    int CRCcount;
    struct ForMemory * _next;
    struct ForMemory * _previous;
}FOR_MEMORY;
0
Kuzia domovenok
2324 / 2072 / 481
Регистрация: 25.03.2012
Сообщений: 7,395
Записей в блоге: 1
29.07.2013, 14:18 16
Цитата Сообщение от sly4ainaya Посмотреть сообщение
да, представляю, как глупо это выглядит, сейчас скажете мне обращаться к vars поиндексно, но мне так нельзя
почему? если других ошибок нет, то всё будет работать!
1
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++;
}
0
Kuzia domovenok
2324 / 2072 / 481
Регистрация: 25.03.2012
Сообщений: 7,395
Записей в блоге: 1
29.07.2013, 14:29 18
current->_address какой тип имеет?
1
sly4ainaya
2 / 2 / 0
Регистрация: 11.03.2011
Сообщений: 49
29.07.2013, 14:33  [ТС] 19
unsigned long long int
0
Kuzia domovenok
2324 / 2072 / 481
Регистрация: 25.03.2012
Сообщений: 7,395
Записей в блоге: 1
29.07.2013, 14:34 20
Цитата Сообщение от sly4ainaya Посмотреть сообщение
unsigned long long int
что за ерунда? Разве это не указатель?
0
29.07.2013, 14:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2013, 14:34

Выделение памяти по известному адресу
Всем привет. Вопрос сообственно в заголовке темы. Как выделить память по...

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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