Например, следующая функция правовой:Является ли законным использовать memcpy с структурой назначения с постоянными членами?
struct two_int {
const int a, b;
}
void copy_two(const two_int *src, two_int *dest) {
memcpy(dest, src, sizeof(two_int));
}
Похоже, что по крайней мере некоторые типы модификаций постоянных заданных значений не допускается, но это мне не ясно, если это квалифицируется.
Если ответ «это не допускается, в общем», я также интересно, о частном случае, когда dest
вновь выделенной памяти с malloc
(и, следовательно, еще не назначен никакой ценности), такие как:
two_int s = {.a = 1, .b = 2};
two_int *d = malloc(sizeof(two_int));
copy_two(&s, d);
Update: Похоже, кажется, ответил утвердительно (это нормально) для случая новопостроенных malloc
«й структуры последнего вопроса, но оригинал, более общий вопрос все еще стоит , Я думаю.
№ Пытается изменить постоянные переменные * где угодно * это * неопределенное поведение *. –
Это означает, что 'two_int' может _never_ быть распределенным через' malloc' или иначе динамически, не так ли? Поскольку вы не можете передать какую-либо информацию о конструкции в 'malloc' ... – SODIMM
Этот вопрос может претендовать на тэг [language-lawyer]. –