C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[5823] Re:malloc할때 access violation이 나는 문제
Drost [] 2595 읽음    2001-03-01 14:19
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이 잘 안된거라면
: 왜 이런 일이 발생하는지 모르겠네요...
:
: 많은 도움 부탁드립니다.
:

+ -

관련 글 리스트
5819 malloc할때 access violation이 나는 문제 jeroh 2381 2001/02/28
5823     Re:malloc할때 access violation이 나는 문제 Drost 2595 2001/03/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.