[완료]2차원 배열을 동적으로 할당

junk11의 이미지

int ** 혹은 char ** 을
int의 2차원배열, char의 2차원 배열로 쓰고 싶습니다

메모리를 어떤식으로 할당해야 되나요?

int **array;
array = (int **)malloc(sizeof(int *) * 10);
*array = (int *)malloc(sizeof(int) * 10);

이런식으로 하면 될듯해서 해봤는데
데이터를 넣을때 세그먼트폴트가 뜨네요..

그리고 int나 char가 아닌 void 타입일때는 다른가요?

SoulreaveR의 이미지

부적절한 예시 =3=3=3=3

[code]#include

#define row 10
#define col 10

int main()
{

int **array;
int i,j;

array = (int **)malloc(sizeof(int *) * row);

for(i=0; i<10; i++)
*(array+i) = (int *)malloc(sizeof(int) * col);

for(i=0; i for(j=0; j *(*(array+i)+j) = i+j;

for(i=0; i {
for(j=0; j {
printf("%d\t", *(*(array+i)+j));
}
printf("\n");
}

return 0;
}[/code]

SoulreaveR의 이미지

삭제가 안되네요 ㅠㅠ

아 몰라 아래분이 답해주셔서 지울려고 했는데 흑

xylosper의 이미지

예를 들어 int

예를 들어 int a[10][20]을 동적할당으로 만들고 싶다면

int **a;
a = (int **)malloc(sizof(int *)*10);
for (int i=0; i<10; ++i)
a[i] = (int *)malloc(sizeof(int)*20);

이렇게 하면됩니다.

junk11의 이미지

답변 감사합니다

루프로 배열마다 따로 할당을 해줘야 되는군요

wsmrdo의 이미지

흠 이런 식으로는 사용해 본적이 없군요.

보통은 포인터 하나 준비하고
배열 X*Y 해서.. 한꺼번에 할당하지요.

설명이 난해하군요.

int *val[10]; <== 이것과 비교하면.
int **array ;

array = val 선언이죠.
*array = val[0]
음 영역을 이차 영역 10개중에 하나만 선언 하셨군요 ^^*

메모리 할당이 부족하겠네요.
[10][10] 배열에서.
[10] <--메모리 확보. 포인터형이죠 포인터를 위한 메모리 확보.
[0][0]~[0][9] 메모리 확보하신 셈이네요. 이부분이 char이나 int나에 따라 달라질듯.

실제 malloc 에서 메모리 할당을 어떻게 하는지는 확인 해봐야 겠고요.

array[0][0] ~ array[0][9]은 어떻든 제대로 동작 하겠네요.
array[1][0] ~ array[9][9]은 확보된 메모리가 없으니 문제가 될겁니다.

포인터 좋아하시는 모양이십니다 ^^
어떻든 위의형식으로. 9개의 공간은 더 쓰셔야 겠습니다.

*array = (int *)malloc(sizeof(int) * 10);
==> array[0] = (int *)malloc(sizeof(int) * 10);
이와 같으니.
array[1] = (int *)malloc(sizeof(int) * 10);
....
array[9] = (int *)malloc(sizeof(int) * 10);

하시던 다른 방법을 취하시던 메모리를 더 확보 하셔야 합니다.

도움이 되시길..

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.