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

C/C++ Q/A
[1534] Re:return 에 관해서 궁금한것이있는데요..
남병철.레조 [lezo] 1279 읽음    2002-11-13 12:41
배열을 리턴하는것은 배열 선두 포인터를 리턴하는것이라고 보아도 되겠네요.
이미 리플로 간단히 힌트가 달려있기에 그냥 두려고 했다가 약간 짬을내어
적어보았습니다.

3가지로 구분했는데 일상적으로 사용하는 배열, 지역 배열 리턴, 동적 메모리할당 배열리턴
으로 구분되어있습니다.
각각 array, array1, array2

코드를 보시면 아시겠지만 지역 할당 배열을 그냥 리턴하고 그 메모리 영역에 썻다 지웠다도
잘됩니다. 분명 VC++에서는 오류가 뜨겠지만 빌더에서는 코드가드를 띄우기 전에는 조용합니다.
사실 비할당 영역을 쓰는것은 코드의 오류라기 보다는 프로그래머의 의도적 행위라고 규정하는게
맞겠지요.(예전에는 텍스트 출력 등등에 이런 방식을 실제 의도적으로 사용했기에...)
VC++옵션에도 그런게 있는지 잘 모르겠지만 이런 자유도가 C/C++의 강점중 한 단면이 아닐까
합니다.
하지만 좀더 속박(?)을 좋아하시는 분들.. 또는 자신이 만든 코드지만 만들어 놓고 보니 두려운
분들은 코드가드에게 도움을 요청하시면 되겠네요. ^^
칼같이 탁탁 찝어줍니다.
코드를 안전하게 만들고 싶으면 항상 코드가드를 켜고 컴파일 하는것도 괜찮겠지요.

직접 코드가드 사용않하고 컴파일하고, 사용하고 컴파일 해보세요.



//---------------------------------------------------------------------------

#include <stdio.h>
#include <conio.h>
#pragma hdrstop

//---------------------------------------------------------------------------
int* array( int* ar );
int* array2();
int* array3();

#pragma argsused
int main(int argc, char* argv[])
{
    int good[2] = { 11, 12 };

    int* ar;
    int* br;
    int* cr;

    // 일반적 배열
    printf( "\n%d %d", good[0], good[1] );

    // 인수로 넘겨받은 배열
    ar = array( good );
    printf( "\n%d %d", ar[0], ar[1] );

    // 지역 배열을 넘겨 받은경우
    br = array2();
//    br[0] = 12; // 코드가드에게 들킴...
//    printf( "\n%d %d", br[0], br[1] );    // 역시 코드가드에게 들킴...

    // 메모리 할당으로 넘겨받은 배열
    cr = array3();
    cr[0] = 1111;
    printf( "\n%d %d", cr[0], cr[1] );

    delete[] cr;
//    cr[0] = 2222; // 당연 코드가드에게 들킴...

    getch();
    return 0;
}

//---------------------------------------------------------------------------

int* array( int* ar )
{
    ar[0] = 100;
    return ar;
}

//---------------------------------------------------------------------------

int* array2()
{
    int bad[2] = { 13, 14 };

    bad[1] = 15;

    return bad;
}

//---------------------------------------------------------------------------

int* array3()
{
    int* good2 = new int[2];

    good2[0] = 1000;
    good2[1] = 2000;

    return good2;
}

//---------------------------------------------------------------------------





김경래 님이 쓰신 글 :
: return값을 배열로는 지정이 안되나요?
:
: return array[3];
: 이런식으로 말이죠...
:

+ -

관련 글 리스트
1530 return 에 관해서 궁금한것이있는데요.. 김경래 1491 2002/11/12
3698     Re:return 에 관해서 궁금한것이있는데요.. 이영우 1364 2002/11/12
3697     Re:return 에 관해서 궁금한것이있는데요.. 김백일.cedar 1443 2002/11/12
1534     Re:return 에 관해서 궁금한것이있는데요.. 남병철.레조 1279 2002/11/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.