C 2차원 배열 동적 해제 질문입니다
글쓴이: inel0910 / 작성시간: 일, 2008/10/19 - 5:54오후
2차원 배열을 동적 할당한 후 해제를 하려 하는데요,
이경우 2차원 배열의 행과 열을 항상 같게 해야만
동적 해제가 가능한 건가요??
아무리 해도 안되네요;;
혹시라도 어디가 잘못된 것인지 알려주신다면 감사하겠습니다~
예제 소스는
파일로 부터 입력식을 파싱하여 받는 소스 중 일부입니다
3X4를 받고 해제 시키려고 하는데 잘 안되네요;;
#include <stdio.h> #include <stdlib.h> #include <math.h> void main() { int i, j, k; int elementNumber; char line_buf[256]; char char_buf[10]; char temp[10]; int sign; //int temp; //Gauss Elimination FILE *in1 = NULL; in1 = fopen("hw1_in1", "r"); fscanf(in1, "%d", &elementNumber); //elementNumber++; //입력받은 수로 2차원 배열 동적할당 int **matrix; matrix = (int **)malloc(sizeof(int)*(elementNumber)); for(i = 0; i <= elementNumber; i++) matrix[i] = (int *)malloc(sizeof(int)*(elementNumber)); //파일로부터 행렬 받아옴 i = 0, j = 0; for(i; i < elementNumber; i++) { for(j; j <= elementNumber; j++) { fscanf(in1, "%s", &temp); if( (temp[0] == 45) || (temp[0] == 43) || (temp[0] == 61) ) { //계수의 부호처리 if( temp[0] == 43 ) //계수가 +일 경우 sign = 1; else if( temp[0] == 45 ) //계수가 -일 경우 sign = -1; *temp = NULL; fscanf(in1, "%s", &temp); } if( temp[0] == 48 ) matrix[i][j] = 0; else if( (temp[0] != 48) && (sign == -1) ) { matrix[i][j] = -atoi(temp); if( matrix[i][j] == 0 ) matrix[i][j] = -1; } else if( (temp[0] != 48) && (sign == 1) ) { matrix[i][j] = atoi(temp); if( matrix[i][j] == 0 ) matrix[i][j] = 1; } else if( (temp[0] != 48) && (atoi(temp) == 0) ) matrix[i][j] = 1; else matrix[i][j] = atoi(temp); sign = 0; *temp = NULL; } j = 0; } //for debug i = 0, j = 0; for(i; i < elementNumber; i++) { for(j; j <= elementNumber; j++) { printf("%d\t", matrix[i][j]); } printf("\n"); j = 0; } ///* //매트릭스 동적해제 for(i = 0; i < elementNumber; i++) { free(matrix[i]); } free(matrix); //*/ }
예제 입력 파일 입니다
3
x - y + 2z = 0
2x + y - z = 2
x + y + z = -1
Forums:
sizeof(int *)가 되어야하는 거 아닌가요?
matrix = (int **)malloc(sizeof(int)*(elementNumber));
이 부분에서 sizeof(int)가 아니라 sizeof(int *)가 되어야하는 거 아닌가요?
다른 부분은 잘 모르겠지만, 이 부분은 확실히 좀 이상한 것 같습니다.
댓글 달기