재귀호출 함수의 페이지 사이즈 문제
파일을 읽어 정리하는 프로그램중입니다..
--------------------------------------------------
read_located 함수와 메인 프로그램은
문의를 위해 문의 창에 직접 입력을 한것이라 오류가 있을수 있습니다
--------------------------------------------------
파일의 내용은
아래와 같은 좌표 데이타가 1000개 이상있는경우도 있습니다.
===================================================
(35571.717, 117599.84, 0)
(35605.056, 117531.32, 76.2)
(35681.256, 117531.32, 0)
===================================================
===================================================
파일 소스
===================================================
FILE * spb;
void main(void)
{
file_read();
}
void file_read(void)
{
int line_read[350]
if((spb=fopen(readFile,"r"))==NULL){
printf("file error : cannot open %s \n",readFile);
exit(1);
}
while(fgets(line_read,350,spb)!=NULL){
read_located(spb,line_read);
}
}
void read_located(FILE * dump,char attr[]){
char line[350];
char attr_temp[200];
char *mem;
char locate_x[100],locate_y[100],locate_w[100];
int i;
int fill_check_count=0;
user_strcpy_s(attr_temp,strtok(attr,"(")); //strcpy 의 보완점개선한 함수 strcpy로 변경가능
user_strcpy_s(locate_x,strtok(NULL,","));//strcpy 의 보완점개선한 함수 strcpy로 변경가능
user_strcpy_s(locate_y,strtok(NULL,","));//strcpy 의 보완점개선한 함수 strcpy로 변경가능
user_strcpy_s(locate_w,strtok(NULL,")"));//strcpy 의 보완점개선한 함수 strcpy로 변경가능
//입력파일에서 데이타를 분리한것을 화면에 표시
printf("------------->[%d]xyw[%s,%s,%s]\n",fill_check_count,locate_x,locate_y,locate_w);
for (i=0;i<350 ;i++ )
{
line[i]=NULL;
}
fill_check_count++;
fgets(line,350,dump);
read_located(dump,line); // 재귀호출 함수
}
===================================================
문의사항 1:read_located(dump,line);
이함수로 재귀호출을 하면 800개쯤 읽고 나서 프로그램이 멈추어버립니다..
기존에 변수를 초기화 하지 않은것이 포함된경우는 300개정도 읽고 멈추었는데 좀더 파일이 큰것을 읽었더니 800개쯤에서 멈추네요..
재귀호출 함수는 메모리의 사용제한이 있는지요..??
문의 사항 2: 파일을 읽어 파일 포인트를 넘겨받아서 작업을 하고 있는데 이경우 파일 읽기 문제가 있는지 궁금합니다..
몇일동안 디버깅도 돌려보고 하는데 딱히 문제점이 없어보이는데 마지막 데이타를 읽을때쯤 문제가 발생을 합니다..메모리를 할당해서 사용하고 다시 free 를 해주는 방식으로 프로그램을 해야하는지 알고싶어서 문의를 드립니다..
저 상태에서는 재귀호출이 중단될 조건이 없으니까...
저 상태에서는 재귀호출이 중단될 조건이 없으니까... 무한히 재귀호출할 거고 스택 영역이 꽉 차는 순간 죽겠네요.
애초에 file_read 쪽에서 루프를 돌며 한줄씩 읽을 수 있게 되어 있는데, 굳이 read_located 가 재귀호출하게 만드시는 이유라도...?
좋은 하루 되세요!
재귀호출 중단은
전체 프로그램을 적은것이 아니라서 재귀호출 중단은 빠져있습니다..
재귀호출 중단은 똑같은 값이 나오지 않는부분이 호출되면 빠져나가고 있습니다..
read_located 가 재귀호출 되는것은 기존 원본파일이 조금 복잡합니다..
복잡한 파일구조에서 위에 좌표가 나오는 부분만 찾아서 출력하려 한것입니다..
저런 형태의 조건이 여러가지가 있어서..
조건에 따라 읽어들이면서 진행하다 거의 마지막 부분에서 멈추어버리네요..
따라서 어쩔수 없이 파일포인터를 가져왔는데.... 다른방법이 있는지 궁금합니다..
[완료] 메모리 할당방식으로 처리했습니다..
전엔 제목을 고칠수 있었는데 수정버튼이 없어졌네요..ㅠㅠ
raymundo 님의 조언으로 메모리 문제일듯싶어..기존에 버퍼를 사용하던 것을 메모리 할당방식으로 처리해서 프로그램하였습니다..
============================================
============================================
위와같이 버퍼 할당을 메모리로 처리하여 완료하였습니다..
너무 많은 데이타를 읽어들여서 발생된것으로 보입니다..
댓글 달기