例如,爲下面的函數法律:使用帶有常量成員的目標結構的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);
更新:這似乎是後一個問題似乎是肯定的,以回答(這是確定),對於一個剛剛malloc
「d結構的情況下,但原來的,更普遍的問題仍然有效, 我認爲。
否。嘗試修改常數變量*任何地方*是*未定義的行爲*。 –
這意味着'two_int'''不能通過'malloc'或其他動態分配,對嗎?由於您無法將任何施工信息傳遞給'malloc' ... – SODIMM
此問題可能符合[language-lawyer]標籤。 –