Назначить ячейку памяти с адресом 0x67AB
и значением 0x1234
с использованием указателей. Я пытаюсь назначить фиксированное местоположение в памяти с помощью указателей и не использовать malloc()
Исправлено расположение памяти в C
ответ
Следующий код записывает 0x1234
на адрес 0x67AB
в адресном пространстве процесс выполнения, если ваша реализация C поддерживает это поведение (поскольку оно выходит за рамки, что требует стандарт C). Возможно, вам понадобится использовать тип, отличный от uint16_t
, в зависимости от ваших точных потребностей. Если вы не знаете, что вы делаете, это код, скорее всего, выходят из строя или вызвать другие проблемы:
#include <stdint.h>
…
* (uint16_t *) 0x67AB = 0x1234;
+1 Мне нравится сжатость '* (uint16_t *) 0x67AB = 0x1234;'. – chux
Если ваша программа запущена в операционной системе, вы не сможете записать ее в место исправления. Чтобы сделать что-то подобное, вашей программе необходимо будет иметь корневой доступ и сделать системный вызов, чтобы сама оперативная система записывала в этом месте.
Однако, если вы пишете программу для микроконтроллера или встроенной системы это, как вы это делаете:
char* p = (char*)0x67AB;
p[0] = 0x12; // You need to write each byte at a time.
p[1] = 0x34;
Работа в операционной системе с виртуальным адресным пространством запрещает вам писать на произвольный адрес физической памяти. Это не мешает вам писать на фиксированный адрес виртуальной памяти, если этот адрес отображается. Это случается очень редко, если разделы загрузчика или программы, связанные с процессом, обеспечивают гарантии того, что определенные адреса используются для определенных целей. –
Должен ли быть записан байт за раз, и является ли он правильным для их написания, зависит от реализации. Также '67ABh' не является стандартным синтаксисом C. Это должно быть '0x67AB', и оно должно быть передано' char * '. –
Я думаю, что ты прав. Прошло много времени с тех пор, как я написал чистый C, поэтому я не очень хорошо это помню. Я думаю, теперь я исправил это. – Marcos
Предполагая, что вы знаете, записи на определенный адрес, если ОК, как в ПОС или контроллера:
#include <stdint.h>
int16_t *ptr = (int16_t *) 0x67AB;
*ptr = 0x1234;
Поскольку конечный элемент integer не указан, байт-байтовая настройка может не обеспечивать ожидаемое поведение.
- 1. Исправлено неправильное расположение заголовка
- 2. C++ выяснить расположение в памяти членов программно
- 3. C# Многомерное расположение массива в памяти
- 4. Исправлено расположение окна поиска с предложениями Autocomplete
- 5. расположение памяти унаследованного класса
- 6. Расположение физической памяти неинициализированной памяти в программе C?
- 7. Исправлено расположение макета: фиксированная боковая панель
- 8. Расположение памяти аргумента функции
- 9. Распечатайте расположение памяти массива
- 10. расположение памяти C структуры с массивами
- 11. Расположение переменных в C
- 12. STM32F407 расположение памяти
- 13. Java и расположение памяти
- 14. jdk1.6 расположение памяти
- 15. расположение памяти в множественном наследовании
- 16. DOS условное расположение памяти
- 17. xsd исправлено в C# const
- 18. расположение памяти статического и внешнего класса хранения в C
- 19. Расположение бинарных файлов ELF в виртуальной памяти
- 20. расположение памяти словаря в python 2.6.4 только?
- 21. расположение памяти для упакованной и распакованной структуры
- 22. Расположение памяти классов (относится к книге моделей объектов C++)
- 23. Расположение указателей и глобальные переменные в C
- 24. Расположение неинициализированных данных в C
- 25. Обновить расположение метки в C#?
- 26. Сохраните расположение массива в C#
- 27. Как определить макрос, описывающий расположение памяти?
- 28. LoadLibrary() - «Неверное расположение памяти доступа (998)»
- 29. ссылки и адрес (расположение памяти) переменной
- 30. расположение памяти вектора <bool>
Выполнено. Что теперь? – Puppy
В общем, код, подобный этому, скорее всего, сбой. У вас есть дополнительная информация, не включенная в вопрос, который гарантирует, что этот адрес можно записать по вашему коду? – simonc
У вас есть гарантия, что можно написать адрес 0x67AB? – BLUEPIXY