내가 할당 된 메모리에 할 수있는 일에 제한이 있습니까 원하는 것을 할 수있다 (현명한 표준)은 내가 할당 된 메모리와
예를 들어
#include <stdio.h>
#include <stdlib.h>
struct str{
long long a;
long b;
};
int main(void)
{
long *x = calloc(4,sizeof(long));
x[0] = 2;
x[3] = 7;
//is anything beyond here legal(if you would exclude possible illegal operations)
long long *y = x;
printf("%lld\n",y[0]);
y[0] = 2;
memset (x,0,16);
struct str *bar = x;
bar->b = 4;
printf("%lld\n",bar->a);
return 0;
}
가 요약하면 :
- 크기가 맞는 한 다른 데이터 유형과 구조체에 대한 포인터를 다시 작성할 수 있습니까?
- 작성하기 전에 읽을 수 있습니까?
- 만약 내가 쓴 후에 읽을 수 없습니까?
- 할당 된 메모리보다 작은 구조체와 함께 사용할 수 있습니까?
[6.5p6] (http://port70.net/~nsz/c/c11/n1570.html#6.5p6)은'memove'와 회사가 유효 유형을 수정한다는 것을 의미합니다. – StoryTeller
@StoryTeller memmove와 memcpy는 확실히 그렇지만 memset이 같은 우산 아래 있다고 생각하지 않습니다. 만약 memset이 유효 타입을 설정했다면 (char - 그 외 무엇인가?), 일반적인 inti (memset (x, 0, n);)는 int를 초기화하여 UB로 유도 할 것이므로, 그렇게하지 않을 것이라고 생각합니다. 실용적인 해석을해라. –
'bar-> b'에 대한 읽기 또는 쓰기는 같은 별칭이 될 것이므로 괜찮을 까? –