Как преднамеренно сохранить и собрать висячий указатель в переполнении стека

Я пишу Плагин LLVM. В нем я создаю глобальный массив указателей которые берут данные по потоку различных функций в программе. Когда указатели получают адрес в области действия функции, логично предположить, что, как только они выходят за пределы их области действия, существует риск того, что содержимое памяти будет перезаписано, если операционная система сочтет это целесообразным.

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

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

0

Решение

Скорее всего вам нужно скопировать данные.

Вы можете пометить память как недоступную для записи, что не позволит никому писать в нее. Однако, если указатель находится в стеке или был освобожден, это, вероятно, будет иметь нежелательные последствия (а именно, segfaults и многие из них). Кроме того, это должно быть сделано на странице, например, большими кусками.

Помните, что если я освобожу указатель, данные, на которые он указал, могут быть позже использованы другой функцией. Даже если я «обещаю» не изменять данные, на которые указывает указатель, после их освобождения … все ставки сняты. Кто-то может выделить ту же память.

Если вам нужно сохранить данные после того, как они будут свободны / они выходят за рамки, вы должны скопировать их.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector