2013-09-03 3 views
0

Xcode에서 C로 프로그래밍하는 데 문제가 있음을 발견했습니다.EXC_BAD_ACCESS : 너무 많은 메모리가 할당 되었습니까?

#define MAX_NUM_VALID 12000 
#define ALT_MAX  200000 

{ 
... 
double   l_adYMLinkedData[MAX_NUM_STAR_VALID + ALT_MAX][1]; 
double   l_adZMLinkedData[MAX_NUM_STAR_VALID + ALT_MAX][1]; 
double   l_adMLinkedData[MAX_NUM_STAR_VALID + ALT_MAX][1]; 
... 
} 

엑스 코드 나에게 말을 실행에 오류를 반환 : 나는 아래에 정의 된 치수와이 세 가지 배열을 할당하려고하면

EXC_BAD_ACCESS (code=2, address:.....) 

와 나는 이유를 알아낼 수 없습니다. 해당 크기 (예 : 100 및 100)를 제한하면 모두 잘됩니다.

아이디어가 있으십니까?

+0

아키텍처는 무엇입니까? i386, x86_64, arm? – trojanfoe

답변

0

스택 (비교적 제한된 리소스 인 경향이 있음)을 넣으려고 시도하는 것은 엄청 많이 있습니다.

당신은 malloc와 마찬가지로 동적 할당을하고 시도 할 수 있습니다 : 효과적으로 당신에게 같은 일을 제공

double *l_adYMLinkedData = malloc ((MAX_NUM_STAR_VALID+ALT_MAX)*sizeof(double)); 
// check and use it 
free (l_adYMLinkedData); 

합니다. sizeof과 같은 포인터/배열 차이와 관련하여 미묘한 차이가 있지만 일반적으로 인덱싱을 수행하는 경우에는 일반적으로 사용되지 않습니다.

0

일반적으로 스택 공간은 제한되어 있습니다 (Visual Studio의 경우 기본적으로 4MB). 각 어레이는 거의 1.6 MB를 차지하며 스택은 더 많은 공간을 할당하려고 할 때 공간을 다 써 버리고 있습니다.

대신 힙에 할당하고 나중에 메모리 누수를 피하려면 해제하십시오.

관련 문제