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 *)가 되어야하는 거 아닌가요?
다른 부분은 잘 모르겠지만, 이 부분은 확실히 좀 이상한 것 같습니다.
댓글 달기