Na przykład, jest następująca funkcja prawna:Czy legalne jest używanie memcpy ze strukturą docelową ze stałymi członkami?
struct two_int {
const int a, b;
}
void copy_two(const two_int *src, two_int *dest) {
memcpy(dest, src, sizeof(two_int));
}
Wydaje się, że przynajmniej niektórerodzaje modyfikacji wartości stałych definiowane jest niedozwolone, ale to nie jest dla mnie jasne, czy to kwalifikuje.
Jeśli odpowiedź brzmi „nie jest dozwolone, w ogóle”, ja też zastanawiać szczególnym przypadku, gdzie dest
jest nowo przydzielonego pamięć malloc
(a więc jeszcze nie przypisano żadnej wartości), takich jak:
two_int s = {.a = 1, .b = 2};
two_int *d = malloc(sizeof(two_int));
copy_two(&s, d);
Aktualizacja: wydaje się, że ta ostatnia kwestia wydaje się odpowiedzieć twierdząco (jest OK) w przypadku nowo malloc
„struktury d, ale oryginalne, bardziej ogólne pytanie nadal stoi , Myślę.
Nr Próba modyfikacji zmiennych stałych * w dowolnym miejscu * jest * niezdefiniowanym zachowaniem *. –
Oznacza to, że 'two_int' może _never_ zostać przydzielone przez' malloc' lub inaczej dynamicznie, prawda? Ponieważ nie można przekazać żadnych informacji konstrukcyjnych do 'malloc' ... – SODIMM
To pytanie może kwalifikować się do znacznika [language-lawyer]. –