오래동안의 숙제였던 동적배열이 해결되었다. ^^
항상 메모리 동적배열에서 실패하고 우회하고 했는데 먼가 해결된 느낌이다. 다행이다.

첨부한 파일은 www.winapi.co.kr에서 가져와서 워드로 편집한거다..그냥 카피 & 페이스트 했다.
첨부파일은 아래에서 참조하면 되겠다.

일단 조사하고 알게된 사항을 간단히 정리하자면,

처음에는 calloc함수를 이용 변수에 메모리를 할당하고
중간에 좀더 메모리 공간을 확장하기 위해서는 realloc을 사용하고,
해제할때는 free를 사용한다.

다음은 사용함수의 원형(Prototype)이다.

void *malloc( size_t size );

void *realloc( void *memblock, size_t size );

void *calloc( size_t num, size_t size );

calloc(씨얼록)은 메모리를 size크기의 num갯수만큼 할당하고 0으로 초기화한다.

realloc(리얼록)은 현재 메모리를 재할당한다.(확장, 축소)

malloc(엠얼록)은 메모리를 size만큼 할당한다. (0으로 초기화하지 않느다)



예) 다음 소스는 한빛미디어사의 'API정복' 이라는 책의 과제중 소스 몇줄이다.

     프로그램내용:
     사용자가 그리는 그림을 다른프로그램이 언커버 되더라도 복구하는 프로그램인데
     자료구조를 복덩은 배열을 선택했다. 링크드리스트는 조금 복잡한 감이있어서... 다음에
     링크드 리스트로도 함 이용해봐야겠다.
     책에 예제에서는 배열을 1000으로잡았으나, 다음소스에서는 동적배열로 구현해 보았다.

1. 구조체는 다음과 같다.
struct tagLine
{
    int x;
    int y;
    int iThick;
    COLORREF tColor;
    BOOL IsMove;
} *pLine;

2. 프로그램시작시 즉 WM_CREATE일때, 
    tagLine의크기만큼, INILINE개 메모리를 할당한다. 그리고 0으로 초기화한다.        
    pLine = (tagLine *)calloc(INILINE, sizeof(tagLine));

3. 이제 동적배열을 생성한다.
 
    tagLine *Temp;
    size_t size;

    size = _msize(pLine);  // 현재까지 설정된 구조체의 포인터의 크기를 구한다. 유용한 함수다.
    Temp =(tagLine *) realloc(pLine,size + sizeof(tagLine));
   
    if (Temp == NULL){
        MessageBox(hWnd, TEXT("메모리를 할당할 수 없습니다."), TEXT("에러"), MB_OK);
    }
    pLine = Temp; 

   → 이부분은 함수로 작성하여 프로그램내에서 Call하는 방식으로 했다.

4. 메모리를 해제한다.
 
   free(pLine); // 간단하다..^^



추가......


전에부터 고민이었던 문제가 해결되어 기쁜다. ^^

한단계 진보한 느낌이다. 다른사람들은 .Net이다 C#하는 마당에 이제 API공부중디다. 앞으로 해결한 문제들을 포

스팅 해볼까한다.


첨부파일




+ Recent posts