AsString에서 AsString의 주소값" /> AsString에서 AsString의 주소값"> 볼랜드포럼: Query->FieldByName("ABC")->AsString에서 AsString의 주소값
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
[67057] Query->FieldByName("ABC")->AsString에서 AsString의 주소값
Starlet [starlet5] 984 읽음    2012-04-30 20:17
조금 전에 원인을 알수 없는 문제로 씨름을 좀 했었습니다.

다음과 같은 함수가 있을 때...

String Func(String Source, int Num)
{
    String Ret;

    if (Num == 1)
    {
        Ret = Source;
        return Ret;
    }
    else
    { ............. }
}


이 함수를

Str = Func(SQLQuery->FieldByName("C_NAME")->AsString, 1);

이런식으로 사용할 수 있죠.

결론은 이렇게 쓰는 것이 위험하다는 것인데,
그 이유가 함수 내에서 Ret = Source 가 실핼될 때 Source가 가진 Data의 주소값이 그대로 Ret의 Data로 복사가 되고 Ret의 Data가 가진 주소값은 그 당시의 ->AsString의 Data 주소값과 같습니다. 그런데, ->AsString이 가진 Data값이 계속해서 변하더군요. 자주 메모리를 해제했다가 다시 다른 메모리에 할당했다가 그러더군요.
즉, Ret가 가진 Data의 주소가 이미 메모리에서 Free 되었다는 것입니다.

이럴 경우 Invalid pointer operation 오류가 나죠. 그런데 과연 이게 원인이 맞는지 모르겠네요. 그리고 왜 AsString의 문자열 주소가 계속 변할까요?

+ -

관련 글 리스트
67057 Query->FieldByName("ABC")->AsString에서 AsString의 주소값 Starlet 984 2012/04/30
67090     Re:Query->FieldByName( 수이사이드 861 2012/05/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.