2013-09-03 3 views
0

J'ai remarqué quelques problèmes de programmation en C dans Xcode. Si je tente d'allouer ces trois tableaux avec les dimensions définies ci-dessous:EXC_BAD_ACCESS: trop de mémoire allouée?

#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]; 
... 
} 

Xcode me renvoie une erreur sur l'exécution disant:

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

et je ne peux pas comprendre pourquoi. Si je limite ces dimensions (c'est-à-dire 100 et 100), tout va bien.

Une idée?

+0

Quelle architecture? i386, x86_64, bras? – trojanfoe

Répondre

0

C'est un tas de choses à essayer de mettre sur une pile (qui a tendance à être une ressource relativement limitée).

Vous pouvez essayer de faire l'allocation dynamique comme avec malloc:

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

Cela vous donne effectivement la même chose. Il y a des différences subtiles à faire avec les différences de pointeur/tableau telles que sizeof mais elles n'entreront généralement pas en jeu si tout ce que vous faites est l'indexation.

0

L'espace de la pile est généralement limité (4 Mo par défaut dans le cas de Visual Studio). Chaque tableau prend près de 1,6 Mo et la pile est à court de l'espace comme il essaie d'allouer plus loin.

Allouez-les sur le tas et libérez-les plus tard pour éviter les fuites de mémoire.

Questions connexes