프로그램에서 문제가 발생하여이를 해결하는 방법을 모르겠습니다. 파일을 처리하고 있으므로 ftell로 크기를 가져 와서 M_size에 저장합니다. 그 후 N으로 부호없는 char 포인터 배열을 선언합니다.이 배열은 두 개의 함수 a()와 b()에서 사용됩니다. 실제로 for 루프 ptr_M의 각 요소를 초기화()큰 포인터 배열을 선언하는 동안 C에서 세분화 오류가 발생했습니다.
...
unsigned long N = (M_size/ x);
int LstElemSize = M_size % x;
if(LstElemSize != 0){
N += 1;
}
unsigned char *ptr_M[N]
a(ptr_M)
b(ptr_M)
...
기능 A :
a(){
int i;
for(i = 0; i < N-1; i ++){
ptr_M[i] = malloc(sizeof(unsigned char) * x);
}
}
기능 B()을 반복 한 후 각 위에 소자 및 물건을 계산하고, 마지막에 각각의 요소가 해제된다.
내 문제는 이제 파일을 처리하려고 할 때입니다. 1 GB 배열 크기는 약 4 000 000이 될 것이고 분할 오류가 발생합니다 (줄에서 내 배열 선언). 8 바이트 (문자 포인터) 시간 4 000 000 = 32MB 올바르게 계산했다면. 프로그램을 실행하는 서버에 파일을 저장할 충분한 메모리가 있지만 Response 1에서 언급했듯이 스택 공간이 충분하지 않습니다.
내 문제를 해결하려면 어떻게해야합니까? 스택 공간 늘리시겠습니까? 감사!
스택에 32MB 어레이를 만들려고합니까? 스택은 일반적으로 단일 숫자 MB 범위에 있으며 VC++를 사용하는 Windows에서는 기본값이 1MB입니다. –