если я выделяю некоторую память с помощью malloc()
, есть способ отметить ее только для чтения. Так memcpy() терпит неудачу, если кто-то попытается написать ему?
Это связано с неисправной архитектурой api, где пользователи пропускают указатель const, возвращаемый методом GetValue()
, который является частью большой структуры памяти. Поскольку мы хотим избежать копирования большого фрагмента памяти, мы возвращаем живой указатель внутри структурированной памяти, которая имеет определенный формат. Теперь проблема в том, что некоторые пользователи находят хак, чтобы получить там вещи, работающие при записи в эту память напрямую, и избегать вызова SetValue(), который выполняет распределение и правильную передачу двоичного формата памяти, который мы разработали. Несмотря на то, что когда-то работал, но иногда он вызывает нарушение доступа к памяти из-за неправильной интерпретации контрольных флагов, которые были отменены пользователем.
Воспитание пользователя - одна из задач, но позвольте сказать, что сейчас мы хотим, чтобы там был сбой кода.
Мне просто интересно, можем ли мы просто защитить от этого случая.
Для аналогии предположим, что кто-то получает столбец blob из оператора sqlite, а затем записывается обратно. Хотя в случае sqlite это не будет иметь смысла, но это несколько хлопот в нашем случае.