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
[6491] Re:malloc()함수에 대한 2가지 질문이요.
남병철 [lezo] 2493 읽음    2001-04-01 16:50
전승호 님이 쓰신 글 :
:
: 첫번째 질문은
: 책에서 malloc()함수를 공부하던 도중 너무 이상해서 질문을
: 드립니다.
: 책에는 분명 malloc()함수를 쓰면 그에대한 첫번째 주소를 돌려
: 준다고 했는데......
: 실제로는 (char *)malloc(인수) , (int *)malloc(인수)......
: 뭐 이런식으로 쓰이던데 어느것이 맞는지 잘 모르겠어요.
: 책대로라면
: char *p;
: p=malloc(10); //이렇게 하면 포인터p는 메모리를 10개잡은곳을
: 가르킨다..... 라고 할수 있다던데 실제로는 malloc앞에 포인터와
: 같은 자료형과 '*'표시를 해야 하더군요.
: 즉
: char *p;
: p=(char *)malloc(10); //뭐 이런식으로 말이죠......
: 어느것이 맞는 방법인지 아니면 둘다 맞는것인데 제가 사용을
: 잘못한건지 꼭좀 가르쳐 주세요.
:
: 그리고 두번때 질문은
: 메모리를 문자열보다 적게 malloc()함수로 할당했는데도 전혀
: 무리없이 출력이 되더군요.
: 믿의 예문에서     myptrs.p2 = (char *)malloc(5); 의
: malloc()안에 값이 5는 훨씬 넘어야 할것 같은데 이상하세 5
: 인데도 실행이 무리없이 되더군요.
: 꼭좀 이유를 가르쳐 주세요.
:
:
: #include <stdio.h>
: #include <string.h>
: #include <stdlib.h>
:
: struct msg {
:     char p1[30];
:     char *p2;
: };
:
: struct msg myptrs;
:
: void main()
: {
:     myptrs.p2 = (char *)malloc(5);  // <--5가아니라
:         //    15정도는 되어야 하는것 아닌지요?
:     strcpy(myptrs.p1, "I WILL DO MY BEST");
:     strcpy(myptrs.p2, "I CAN DO IT");
:     puts(myptrs.p1);
:     puts(myptrs.p2);
: }
:
:


일단 첫번째 질문에 대해서 이야기하면.
malloc함수를 사용할때 특별한 캐스팅을 하지않으면 디폴트로 잡혀있는 자료형의 포인터를 넘기게 될테고
사용하는데 제한이 따르게 되겠지요.
즉, 자신이 사용하고자하는 특정 자료형을 직접명시해 주시는것이 좋은 방법입니다.

두번째 질문에 대해서 이야기하면..
C/C++의 뛰어남(?)이 되려 위험을 안게되는 경우이죠.
언젠가 저도 같은 의문을 품고 물어본적이 있었는데 그때 들은 이야기에 의하면 C의 컴파일러가 넘 똑똑(?)
해서 들어오는 값보다 작은 양의 메모리가 확보되어 있어도 일단 잘 돌아간다고 했습니다.
문제는 어느시점에 가면 런타임에러를 유발해서 프로그램이 죽는 경우가 생기게되지요.
이는 배열로 문자열을 다룰때도 흔히 발생하는데 항상 메모리를 사용하는경우에는 주의를 바랍니다.
사실 문자열은 AnsiString등의 클래스를 사용하는 것이 편리하니 참고하시고 특정 경우에 char*의 문자열
사용을 하시는게 좋다고 생각합니다.
간단한 예로 델파이에서 위처럼 작은 메모리 할당에 큰 문자열을 넣으려 하면 화(?)를 내더군요. ^^;(오류)

+ -

관련 글 리스트
6490 malloc()함수에 대한 2가지 질문이요. 전승호 2187 2001/04/01
6491     Re:malloc()함수에 대한 2가지 질문이요. 남병철 2493 2001/04/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.