블로그 이미지
smstock

카테고리

분류 전체보기 (54)
취미 (8)
공부 (32)
낙서장 (12)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

태그목록

최근에 올라온 글

프로그램을 실행하다 보면 해당 에러가 나오는 경우가 존재한다.

 

window에서는 32bit, 64bit 문제 없이 잘 돌아가는게 arm processer에서만 죽는 현상이다.

 

해당 문제는 64bit로 빌드하면 멀쩡하게 돌아가던게 32bit로 빌드한걸 실행했을 때만 문제가 발생한다.

 

에러난 곳을 살펴보면 struct 안에 존재하는 변수의 레퍼런스에 접근할 때 죽는 것을 확인할 수 있다.

 

일반적으로 struct를 사용할 때 pragma pack을 활용을 많이 한다. 해당 기능의 활용이 문제를 야기하는 것 같다.

 

예를 들어 아래와 같은 상황을 보면

 

#pragma pack(push, 1)

struct STemp

{

int8 a;

int16 b;

int32 c;

};

#pragma pack(pop)

 

static void get_value( int16 *p_value)

{

char str[] = "9999.999";

*p_value = atoi( str); // <-- 에러가 발생하는 위치

}

 

static void get_value( int32 *p_value)

{

char str[] = "9999.999";

*p_value = atoi( str); // <-- 에러가 발생하는 위치

}

 

int main( int argc, char *argv[])

{

STemp sData;

get_value( &sData.b); // <--- 정상 실행

return 0;

}

 

int main( int argc, char *argv[])

{

STemp sData;

get_value( &sData.b);

get_value( &sData.c); // <--- error

return 0;

}

 

위와 같은 결과가 나오는데 아래처럼 직접 값을 입력하면 크래시는 안난다;;

*p_value = 99.99;

 

결론

- 해당 오류 발생하면 pragma pack 사용하지말고 패킷을 serialize해서 전송하는 방식으로 수정하자

 

참고

https://decdream.tistory.com/491

 

signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr

참고 URL : http://stackoverflow.com/questions/3246441/what-does-bus-adraln-invalid-address-alignment-error-means http://www.badayak.com/3302 일반적으로 point 변수에 잘못된 값이 들어가 있을 경우는 nu..

decdream.tistory.com

https://badayak.com/3302

 

Bus error? 버스 에러? 뭐지?

프로그램을 실행해 보니 전혀 본 적이 없는 에러가 출력되네요. Bus error? 프로그램 코드를 보면 전혀 문제가 없는데, 실행만 하면 Bus error가 발생합니다. 재미있는 것을 I386 컴퓨터에서는 발생하지 않는데, A..

badayak.com

 

Posted by smstock
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함