функция std :: memcpy () < /h4>
Для исторической (и c совместимости) причинам), std :: memcpy () < /code> является специальным
, как это может начать сжима, если используется объект.
Неверное использование std :: memcpy () для типа карат будет следующим образом: < /p>
Код: Выделить всё
// suppose this holds for this example
static_assert(sizeof(int) == sizeof(float));
#include
#include
#include
int main() {
float f = 1.5f;
void *p = malloc(sizeof f);
assert(p);
int *q = std::memcpy(p, &f, sizeof f);
int value = *q; // UB
//
}
< /code>
Причина, по которой это незаконно, заключается в том, что призыв к std :: memcpy ()
копирует плавающий объект в хранилище, на которое указывает P, эффективно
, запускаю время жизни плавающего объекта в этом хранилище. Поскольку Q - это
int*, dereferencing, это ub. < /P>
< /blockquote>
Это действительно ub здесь? Не malloc () Подробнее здесь: https://stackoverflow.com/questions/796 ... the-object
Мобильная версия