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

C/C++ Q/A
[6253] Re:[질문]strtok 에서
김진호.불사새 [phenix96] 6069 읽음    2008-10-22 00:43
함수에 인자를 넘길때, 이미 메모리를 할당 해서 정보를 넣고 넘기거나 해야 겠죠.
아니면 함수를 호출한 녀석이, return값을 잘 활용하고 난 후 꼭 NULL이 아니면 delete를 해 주거나 해야 겠죠.
하지만, 그럴 경우, 함수가 내부적으로 동적으로 할당 받는것인지 아닌지를 알수가 없거나, 깜빡 하게 된다면?
메모리 할당화 해제를 이곳 저곳에서 하는것은 위험합니다.

뭐 아래 함수에 우겨 넣는다 치면

char *  __fastcall TMainForm::VersionData(char* cPdata,char *cdata)
{
char cVer[20]={0,};

if(cPdata==NULL)
   return NULL;


sprintf(cPdata,"%c%c%c%c%c%c%c",cdata[1],cdata[2],cdata[3],cdata[5],cdata[6],cdata[8],cdata[10]);
  //memcpy(dest, cPdata, strlen(cdata)+1);
  return cPdata;
}

메모리 할당은 위 함수 부르는 녀석이..

char * pBuf=NULL;

pBuf=new char[strlen(cdata)+1];

VersionData(pBuf, cdata);

다 쓰고 난 뒤

if(pData!=NULL) delete[] pBuf;

뭐 이런식으로요?
VersionData의 return도 저 상태로는 별 의미가 없으니..고쳐야 겠네요.

빨간눈 님이 쓰신 글 :
: strtok에서나 기타 return 으로 char * 값을 갖는 API함수들은 기능 구현을 어떻게 해야될지 의문이 있어서요~
: return으로 char *를 갖는 값은 내부 API에서 포인터에 동적 할당(힙???)과 해제가 이루어져야되는데
: 메모리 할당은 되는데 해제 언제,  어케해야될까요?
:
: char *  __fastcall TMainForm::VersionData(char *cdata)
: {
: char *cPdata;
: char cVer[20]={0,};
: cPdata = new char[strlen(cdata)+1];
: sprintf(cPdata,"%c%c%c%c%c%c%c",cdata[1],cdata[2],cdata[3],cdata[5],cdata[6],cdata[8],cdata[10]);
:  //memcpy(dest, cPdata, strlen(cdata)+1);
:  return cPdata;
: }

+ -

관련 글 리스트
6252 [질문]strtok 에서 빨간눈 5867 2008/10/20
6253     Re:[질문]strtok 에서 김진호.불사새 6069 2008/10/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.