내가 그것을 C에서 구조의 잘못 정렬 된 멤버에 액세스 확인을 경우 테스트하려는 잘못 정렬 구조체 멤버, 액세스
#include <stdio.h>
#pragma pack(1) /* force 1 byte alignment */
/* either member b or member d is mis-aligned */
typedef struct
{
int b;
unsigned char c;
unsigned int d;
}A ;
int main(int argc, char *argv[])
{
A _a = {0};
unsigned int *p = NULL;
unsigned int *q = NULL;
printf("addr of _a : 0x%08x, size of _a : %u\n", &_a, sizeof(_a));
p = (unsigned int*)(&_a.b);
q = (unsigned int*)(&_a.d);
/* should this fail ? */
(*p)++ , (*q)++;
return 0;
}
프로그램이 인해로 충돌합니다 가정의 코드를 참조하십시오 예외가 메모리 정렬 오류로 인해 잘못되었지만 Linux 3.6.11 (GCC 4.7.2), WinXP (MingW), 코드 패드 온라인 컴파일러 (
http://codepad.org/yOoc8ACG)
에서 테스트했습니다. 결과를 설명, 나는 OS가 프로그램을 저장하는 무언가를했는지, VxWorks 또는 일부 다른 운영 체제에서 작동하는지 아직도 의심의 여지가
참고 : 코드는 Intel 기반 컴퓨터에서 실행됩니다!
미리 감사드립니다.
p와 q를 증가시킨 후에 다른 함수로 전달하려고하면 어떻게됩니까? 아니면 그 위치의 메모리에 액세스하려고합니까? –
중복 가능한 [정렬되지 않은 메모리 액세스가 항상 버스 오류를 일으 킵니까?] (0120-336-331) – ecatmur
SPARC에서 실행 . – WhozCraig