strerror
возвращает указатель на текст ошибки по номеру ошибки.Текст ошибки не является какой-то динамической строкой, это предопределенная константа, известная до начала компиляции, поэтому он должен храниться в сегменте .data вместе со всеми другими константами, рядом со всеми другими инициализированными данными.Всякий раз, когда вы вызываете strerror
с тем же параметром, вы получаете один и тот же адрес в той же области памяти, не стесняйтесь попробовать.
Создание новой переменной - это другое дело, она фактически выделяет память из кучи одинаковоспособ malloc
/ new
делает.Если вы вызовете malloc
для небольшого объема данных (например, 16 байт) сразу после создания новой переменной, вы можете получить указатель, действительно близкий к адресу новой переменной.И даже более того, вы можете вызвать free &a
из консоли, чтобы правильно освободить память, ошибки не должны появляться.
Вы действительно можете изучить карту памяти, если хотите
- Запустить иРазмер стека / кучи должен быть определен где-то в конфигурации вашего проекта
- Вы можете попросить компоновщика сгенерировать файл .map , например, и проверить адреса сегментов в нем.
Так что в любом случае вы сможете угадать участок памяти по значению указателя
Обратите внимание, я работал только с более старыми версиями VxWorks (5.5, который имеет), так что это может быть не неточно, но основная идеядолжно быть в порядке.