대량의 파일내용을 받아 어떤 일정문자열과 비교하는 프로그램의 문제점.. 입니다 도와주세요~
500000개의 한줄의 문자열이 저장되어 있는 파일(파일의 내용은 규칙 없이 나열된 ACTGCTACGTAGCTACAGTCAGCTAGCTAGCT... 같이 AGCT 네개의 문자가 무작위로 나열된 문자열입니다.)을 받아 20개의 문자열을 500000개의 문자열과 어느정도 비슷한지 퍼센트를 구하는 간단한 프로그램을 만들었습니다.
#include <stdio.h> #include <string.h> #define MAX_size 500001 int main(void){ int i, h, l, per; FILE *fp; char ref[MAX_size]; fp=fopen("ref.txt", "r"); fscanf(fp, "%s", &ref[0]); int ref_len=strlen(ref); char pri[]="CATGAACATGCATGCATCACGT"; int pri_len=strlen(pri); l=ref_len-pri_len+1; char ref_arr[l][pri_len]; for(h=0; h<l; h++){ int j=0; for(i=h; i<pri_len+h; i++){ ref_arr[h][j]=ref[i]; j++; } } for(h=0; h<l; h++){ int co=0; for(i=0; i<pri_len; i++){ printf("%c", ref_arr[h][i]); if(ref_arr[h][i] == pri[i]){ co++; } } per=100*co/pri_len; printf(" %d", per); printf("\n"); } return 0; }
결과는
~~~~~~~(중략)~~~~~~~
ATTTTTGAAAGCTCCACA 27
TTTTTGAAAGCTCCACAT 22
TTTTGAAAGCTCCACATA 33
TTTGAAAGCTCCACATAT 27
TTGAAAGCTCCACATATC 44
TGAAAGCTCCACATATCC 16
GAAAGCTCCACATATCCA 22
AAAGCTCCACATATCCAG 22
AAGCTCCACATATCCAGG 38
AGCTCCACATATCCAGGT 0
GCTCCACATATCCAGGTA 33
CTCCACATATCCAGGTAC 27
TCCACATATCCAGGTACA 38
CCACATATCCAGGTACAC 16
CACATATCCAGGTACACT 33
ACATATCCAGGTACACTC 27
CATATCCAGGTACACTCG 44
ATATCCAGGTACACTCGA 0
~~~~~~~(중략)~~~~~~~
위와 같습니다.
문제는 여기서 비교할 문자열이 24개의 문자열을 초과하면 결과가 출력되지를 않습니다. 다른 조건에서는 어떤 결과가 나오는 지를 알아보기 위해 아래와 같이 테스트를 하였는데,
define MAX_size를 250001로 지정하고 250000개의 한줄의 문자열이 저장되어 있는 파일을 받아 49개의 문자열을 초과하였을 때 결과가 나오지를 않고,
define MAX_size를 500001로 지정하고 500000개의 한줄의 문자열이 저장되어 있는 파일을 받아 24개의 문자열을 초과하였을 때 결과가 나오지를 않고,
define MAX_size를 1000001로 지정하고 1000000개의 한줄의 문자열이 저장되어 있는 파일을 받아 11개의 문자열을 초과하였을 때 결과가 나오지를 않고,
define MAX_size를 2000001로 지정하고 2000000개의 한줄의 문자열이 저장되어 있는 파일을 받아 5개의 문자열을 초과하였을 때 결과가 나오지를 않습니다.
무조건 500000개나 1000000개의 문자열과 같이 대량의 데이터를 받아야 합니다...
왜 결과가 나오지 않는지가 궁금합니다.
도와주세요~~!!
스택사이즈가 허용량을 초과해서
스택사이즈가 허용량을 초과해서 그렇습니다.
ulimit -a 를 보면 stack size를 확인해 볼 수 있는데, 저는 8192KB 로군요.
한가지 방법은 stack size를 증가시키는것.
또 한가지는 stack 대신 malloc을 사용하는 것입니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
감사합니다. "ulimit -s (stack
감사합니다.
"ulimit -s (stack size)"로 stack size를 증가시키는 방법을 알아내었습니다.
그런데 malloc를 사용하신다는 것은
str=(char *) malloc (sizeof(char) * (지정한 사이즈 + 1)
위와 같은 것을 사용한다는 것입니까?
본문 소스에 ref, pri에 malloc를 적용 시켜 준다는 것인지...
잘못작성..
잘못작성..
댓글 달기