|
jeroh 님이 쓰신 글 :
: :
:
: 아래와 같은 코드에서요,
:
: EXP_UNIT* Tunit = (EXP_UNIT*)malloc(sizeof(EXP_UNIT));
: memset(Tunit,NULL,sizeof(EXP_UNIT));
: Tunit->arc_num=0;
: Tunit->head_ptr = hunit;
: Tunit->islexical = -1;
: if(Tunit->id == NULL)
: {
: Tunit->id = (int*)malloc(sizeof(int)); *********
: memset(Tunit->id,NULL,sizeof(Tunit->id));
: }
: else
: memset(Tunit->id,NULL,sizeof(Tunit->id));
: *(Tunit->id) = id;
:
:
: ******* 부분에서 access violation이 나거든요.
: Tunit->id 가 NULL이면 memory allocation이 안된건데,
: malloc하는데 왜 이런 문제가 발생하는가요?
:
: 그리고, sizeof(EXP_UNIT) = 4000 이면,
: 첫번째 line에서 Tunit을 malloc하고 나면,
: sizeof(Tunit) = 4000이 되어야 하는거 아닌가요?
: 근데 여전히 sizeof(Tunit) = 4로 나오는군요
당연한 결과입니다. Tunit가 어떤 구조체나 클래스인지는 모르겠지만(아마도 구조체이겠지요,
클래스라면 new를 통해서 메모리를 할당할 테니까), 여기서 Tunit 자체는 포인터입니다.
윈도우 환경이라면 포인터의 크기가 4바이트이니 sizeof(Tunit)의 결과가 4가 나오는 겁니다.
그리고 첫번째 라인에서 malloc으로 할당을 하였는데, 그 멤버를 다시 malloc으로 재할당할
필요가 있겠습니까?
.
: 첫번째 line에서부터 malloc이 잘 안된거라면
: 왜 이런 일이 발생하는지 모르겠네요...
:
: 많은 도움 부탁드립니다.
:
|