2009-10-11 5 views
1

Le code suivant bloque mon programme. J'ai trouvé que le problème est la taille du tableau. Si je réduis la taille à 320 * 320, ça marche bien. Est-il logique que cette blessure soit une limitation? Si oui, qu'est-ce qu'un travail autour? Je code dans Objective C pour IPhone. Toute aide serait appréciée.Taille maximale de l'index pour le tableau

Merci!

int life_matrix[320*350]; 
x_size=320; 
y_size=350; 
for (int counter=0; counter < x_size; counter++) 
{ 
    for (int counter2=0;counter2 < (y_size); counter2++) 
    { 
    life_matrix[counter*(int)x_size+counter2] = rand()%2; 
    } 
} 
+0

life_matrix est un grand tableau – pxl

Répondre

3

leiz's conseil est correct, vous devriez vraiment allouera cette dynamique sinon vous courez le risque de courir dans une situation était la taille du tableau est plus grande que la mémoire disponible sur la pile. La formule que vous utilisez pour mapper une grille bidimensionnelle sur un tableau à une dimension est également incorrecte. Vous devriez multiplier par y_size au lieu de x_size.

life_matrix[counter*(int)y_size+counter2] = rand()%2; 

ou vous pouvez retourner vos compteurs

life_matrix[counter2*(int)x_size+counter] = rand()%2; 

Une autre approche pour résoudre ce serait de l'utiliser comme un tableau 1 dimensions pour l'initialisation:

for(int n = 0; n < x_size * y_size; ++n) { 
    life_matrix[n] = rand()%2; 
} 
7

La baie est allouée sur la pile et généralement la taille de la pile est limitée. Si vous avez besoin d'un grand tableau, c'est généralement une bonne idée de l'allouer en tas.

+0

Merci, je pense que cela peut être fait en C++ avec le constructeur 'new'. Mais savez-vous comment faire cela en Objective C? –

+0

Vous pouvez utiliser l'ancien C malloc, ou utiliser std :: vector je présume. Désolé, je ne connais pas très bien l'objectif C. – leiz

+0

vous pouvez utiliser malloc/free en Objective-C pour la gestion dynamique de la mémoire. – fbrereto

Questions connexes