| [ CnUnix ] in KIDS 글 쓴 이(By): parresia (누구게) 날 짜 (Date): 2004년 6월 8일 화요일 오전 09시 33분 49초 제 목(Title): Re: [Q] malloc and array 대략 다음 경우중 하나일거라 추측합니다. 역시나 제대로 알려면 allocation하는 코드와 사용하는 코드 조각이라도 보여주셔야 하겠죠. 신이 아닌 담에야 어떻게 에러의 원인을 맞출 수 있겠습니까? 1. array에서 예를 들어 int a[100]을 int *a = malloc(100);이라고만 했다. malloc시에는 sizeof(type) * element 갯수가 필요. 2. constructor가 있는 class의 배열을 사용하기 위해 malloc을 썼다. class C { public: C() { a = new char[100]; } private: char *a; } C x[100]; vs C* x = malloc(100 * sizeof(C)); 대략 위와 유사한 경우. malloc을 사용하면 a가 초기화 되지 않아 문제가 있을 수 있음. 3. n차원 어레이를 단순히 *가 들어간 포인터의 포인터로 바꿨다. 예를 들어 char a[10][20]; 을 char **a; a = (char **)malloc(10*20); 실제로는 char **a = (char **)malloc(sizeof(char *) * 10; for(int i=0;i<10;i++) a[i] = (char *)malloc(20); 정도가 되야할것? 4. 기타 다른 이유.. : 며느리도 몰러~~ 대충 봐야할 부분은 1) malloc한 부분에서 메모리 크기를 제대로 줬나? 2) 혹시 malloc해서 할당받은 메모리가 NULL인것은 아닌가? 3) array사용시 첨자를 넘어간것은 아닌가? 4) 할당받아 저장한 포인터를 overwrite하지는 않았나? 5) malloc함수가 실제로 실행되지 않은것은 아닌가? 권하는 방법은 일단 gdb 사용법을 익혀서, seg. fault가 난 부분을 tracing해 보심이 어떨까요? |