게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어 2차원 메모리 동적할당 질문
게시물ID : computer_622짧은주소 복사하기
작성자 : 겨울악령
추천 : 0
조회수 : 604회
댓글수 : 0개
등록시간 : 2011/01/24 04:18:11
인터넷에 2차원 배열 동적할당으로 2개의 코드를 찾았는데요

방법 1.

할당
ptr=(char**)malloc(sizeof(char*) * 3); // 포인터배열 갯수
*ptr=(char*)malloc(sizeof(char) * 12); // 2차원배열 총 갯수
for(i = 0; i < 3; i++){
    ptr[i] = ptr[0] + 4 * i;
}

해제
free(*ptr);
free(ptr);



방법 2.

할당
ppArray = (int**)malloc(sizeof(int) * nX);
for(i = 0; i < nX; i++){
    ppArray[i] = (int *)malloc(sizeof(int) * nY);
}

해제
for(i = 0; i < nX; i++){
    free(ppArray[i]);
}
free(ppArray);

이렇게 2가지 방법을 찾았는데 둘다 맞는건가요?

첫번째 방법의 코드를 보면 3행 4열의 동적 할당을 하는것 같은데

ptr=(char**)malloc(sizeof(char*) * 3); 이 코드를 보면

sizeof(char*) *3을 했는데 이렇게 하면 char* 사이즈가 포인터 사이즈 이기 때문에 4 * 3이되서

12의 메모리가 할당되는것 같은데... 맞는건가요?

2중 포인터라서 먼저 열의 시작 주소값을 가리킬 포인터 변수들을(포인터 변수이기 때문에 메모리 4씩)

동적할당하고 거기에 열의 메모리를 할당해 주는 것같은데...

for문은 할당된 열을 4씩 끊어서 부분배열에 열의 시작 주소값을 이어주는 것 같구요

그리고 해제 할때도 free(*ptr)로 먼저 해제 하는데 이렇게 하면 3개 행의 모든 열이 다 회수 되는건가요?

이게 맞다면 2번째 방법은 자료형이 int라서 맞았지

ppArray = (int**)malloc(sizeof(int) * nX); 여기에서 sizeof(int *)로 해줘야 하나요?

2번째 방법의 코드에서 자료형만 전부 int에서 char로 바꿔줘도 맞는 코드인가요?

ppArray = (char**)malloc(sizeof(char) * 3); 이 되면 1 * 3이 되서

열의 시작 주소값을 가리키게 될 부분 배열의 포인터 변수 메모리 크기가  3밖에 안 잡히는데요?

엄청 헷갈리네요 ㅠㅠ 자세한 설명좀 부탁드리겠습니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호