2010-05-20 5 views
4

Le code suivant provoque un débordement de pile, mais je ne vois pas pourquoi ...Pourquoi ce code plante-t-il?

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    cout << "start"; 
    char bmp[1024][768][3]; 
for (int p = 0; p < 9000; ++p) 
{ 
    for(int i = 0; i < 1024; ++i) 
    { 
     for(int j = 0; j < 768; ++j) 
     { 
      bmp[i][j][0] = 20; 
     } 

    } 
} 

cout << "Stop"; 


    return 0; 
} 

Merci

+4

Que fait la boucle externe (sur 'p')? – ChrisF

+0

20 n'est pas un char – adhanlon

+1

@ Silmaril89: Oui c'est ... – nico

Répondre

16

Je dirais qu'il est probable que 1024 * 768 * 3 est 2,359,296 qui est probablement trop grand pour la pile locale.

Vous devriez plutôt l'allouer sur le tas.

+0

ok cela a du sens – jmasterx

+7

La pile par défaut est 1 Mo sur Windows. http://msdn.microsoft.com/en-us/library/ms686774.aspx –

+1

Et préférez un vecteur std :: – stefaanv

2

Allocation des pannes int array car elle est plus importante que la pile Windows par défaut. Essayez de changer sa taille et vous verrez qu'il ne se bloque plus.

Questions connexes