본문 바로가기

Programming/Linux_Platform

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 변수에 잘못된 값이 들어가 있을 경우는 null point exception 이나 다른 error 가 발생할 것이지만,

변수 자체가 invalid address alignment error 가 발생했다는 것은, 다른 수행에 의해서 변수 값 영역이 침범당했음을 의미한다.


아래 아티클의 작성자는 원인을 찾지 못했지만,

http://www.badayak.com/3302

아마 원인은 아래 (1) 을 수행할때 f_value3 영역이 침범당했기 때문일 것이다.


int   main( int argc, char *argv[])
{
    t_curr_value curr_value;

    get_float_value( &curr_value.f_value3);  // <--- 정상 실행

    return 0;
}

int   main( int argc, char *argv[])
{
    t_curr_value curr_value;

    get_float_value( &curr_value.f_value1);  // - (1)
    get_float_value( &curr_value.f_value3);  // <--- Bus error!!

    return 0; 

}


static void get_float_value( float *p_value){

    char str[] = "9999.999";

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