Lorsque je tente d'exécuter ce que je reçois une erreur de segmentation:Taille maximale de variable tableau locale
#define FILE_NAME "test.html"
#define STRING_ARRAY_SIZE 1000000
int main() {
fstream file;
string line = "";
string string_array [STRING_ARRAY_SIZE];
int i = 0;
file.open(FILE_NAME);
while(getline(file, line)) {
string_array[i] = line;
i++;
cout << line << endl;
}
file.close();
}
Au lieu de cela, lorsque je tente de compiler cela, il fonctionne:
#define FILE_NAME "test.html"
#define STRING_ARRAY_SIZE 100000
int main() {
fstream file;
string line = "";
string string_array [STRING_ARRAY_SIZE];
int i = 0;
file.open(FILE_NAME);
while(getline(file, line)) {
string_array[i] = line;
i++;
cout << line << endl;
}
file.close();
}
fin de compte, la seule différence est la taille du tableau. Pourquoi ça marche quand c'est 100000, et ça ne marche pas quand c'est 1000000? Quelle est la taille maximale? Je vous remercie.
Les variables locales, y compris les tableaux, sont placées sur la pile, qui a une taille limitée. Sur Windows utilisant VC++, c'est 1 Mo par défaut, sur Linux, c'est typiquement 8 Mo. Essayer d'allouer plus que cela sur la pile provoquera un * débordement de pile * qui conduit à un comportement indéfini et très probablement à un crash. Le nombre maximal de membres dans un tableau n'est pas fixe, mais dépend de la taille des données et de la taille de la pile restante. –
Avez-vous vraiment une erreur de segmentation ** lors de la compilation **? Cela voudrait dire que le compilateur a un bug, ou quelque chose comme de la mémoire défectueuse ... Probablement pas, mais il serait bon de le rendre plus clair. –
vous les gars ont raison. L'erreur de segmentation se produit au moment de l'exécution :) – user3289157