En C ou C++, les objets locaux sont généralement alloués sur la pile. Vous allouez un grand tableau sur la pile, plus que ce que la pile peut gérer, et vous obtenez donc un message d'erreur stackoverflow.
Ne l'allouez pas localement sur la pile, utilisez un autre endroit à la place. Ceci peut être réalisé soit en rendant l'objet mondial ou l'allouer sur la base globale amas . Les variables globales sont acceptables si vous ne les utilisez pas à partir d'une autre unité de compilation. Pour être sûr que cela ne se produise pas par accident, ajoutez un spécificateur de stockage statique, sinon utilisez simplement le tas.
Cette allocation se fera dans le segment BSS, qui est une partie du tas :
static int c[1000000];
int main()
{
cout << "done\n";
return 0;
}
Cette allocation se fera dans le segment DATA, qui fait également partie du tas :
int c[1000000] = {};
int main()
{
cout << "done\n";
return 0;
}
Cela va allouer à un emplacement non spécifié dans le tas :
int main()
{
int* c = new int[1000000];
cout << "done\n";
return 0;
}