2017-03-06 2 views
0

나는 프로토콜을 테스트하고 조정하고 있습니다. 다음 코드를 실행할 때 배열 크기를 say..300000으로 만들면 충돌이 발생합니다. 그것은 200000에서 실행됩니다. 그 숫자는 매우 작게 보인다. 내 PC인가요, 제 코드인가요? 도와주세요. 제 목표는 간단한 수학을하고, 파일에 쓰고, 파일을 닫고, 파일을 열고 여는 동시에 다른 파일에 쓸 수있는 속도를 보는 것입니다. 나는 win7에서 Codeblocks GNU GCC 컴파일러를 사용하고있다. 또한코드에 작은 한계가 있습니다.

#include <stdio.h> 
int main() { 
printf("Hello Test\n"); 
FILE *fp; 
FILE *fp2; 
FILE *fp3; 
int a; 
int sizofFile = 300000; 
int pix[sizofFile]; 
int pix2[sizofFile]; 
fp = fopen("dig.txt", "w+"); 
for (a = 0; a<(sizofFile); a = a + 1){ 
    pix[a]=a * 2; //load the array 
    } 
    fwrite(pix, sizeof(a), sizofFile, fp); //stream data to file 
printf("Good bye Test \n"); 
fclose(fp); //close first file 
fp2 = fopen("dig.txt", "r"); // reopen file to read 
fp3 = fopen("dig2.txt", "w+"); // open a write file for human vision 
fread(pix2, sizeof(a), sizofFile, fp2); 
for (a = 0; a < sizofFile; a = a + 1){ 
    fprintf(fp3, "%d \n", pix2[a]); // make human readable 
    } 
fclose(fp2); 
fclose(fp3); 
return 0; 
} 
+0

free을 떠나기 전에, 지금하고있는 것처럼

int *pix = malloc(sizofFile * sizeof(int)); int *pix2 = malloc(sizofFile * sizeof(int)); 

사용하는 대신 자동 변수의 malloc''긴 대신 INT –

+4

시도의 시도. –

+0

일반적인 코드 서식 스타일을 사용하십시오. 읽을 수 없습니다. – KevinDTimm

답변

1

지역/자동 배열 저장 크기는 스택 크기/자동 변수 저장에 따라 달라집니다. 내가 dig2.txt의 하단에 기대하는 것과 다른 번호를 얻을 수 (2 씩 증가하지 않음). 당신은 컴파일러 옵션을 사용하여 그것을 늘릴 수 있지만 그것은 최선의 방법은 아닙니다.

대신 malloc으로 할당 된 데이터를 사용해야합니다. 제한은 훨씬 더 높습니다 (컴퓨터의 프로세스 메모리 제한/실제 메모리에 따라 다름). 이것이 큰 배열을 할당하는 방법입니다. 그런 다음 메모리

free(pix); free(pix2); 
+0

JFF에게 답변 해 주셔서 감사합니다. – Doug