Erreur de segmentation ...
Résolu/Fermé
martiennette
Messages postés
2
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
24 janvier 2008
-
23 janv. 2008 à 16:17
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 24 janv. 2008 à 10:19
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 24 janv. 2008 à 10:19
A voir également:
- Erreur de segmentation ...
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur de lecture reconnecté en 3s - Forum TV & Vidéo
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
3 réponses
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
23 janv. 2008 à 20:01
23 janv. 2008 à 20:01
Problème d'espace mémoire?
martiennette
Messages postés
2
Date d'inscription
mercredi 23 janvier 2008
Statut
Membre
Dernière intervention
24 janvier 2008
24 janv. 2008 à 09:38
24 janv. 2008 à 09:38
Oui, tout simplement
La taille de mes matrices etait trop grosse.
je m'en suis finalement sortie en faisant un traitement bout par bout de mes données, ce qui evite de garder en mémoire de trop grosses matrices.
merci
marie
La taille de mes matrices etait trop grosse.
je m'en suis finalement sortie en faisant un traitement bout par bout de mes données, ce qui evite de garder en mémoire de trop grosses matrices.
merci
marie
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
24 janv. 2008 à 10:19
24 janv. 2008 à 10:19
Bonjour,
En effet, j'avais fait un léger test hier soir et plouf !
Le problème n'est pas la taille mais l'endroit. En temps que variables locales d'une fonction, tes tableaux sont stockés dans la pile. C'est comme une pile d'assiette, on stocke en ajoutant au dessus chaque fois, elles sont toutes visibles (accessibles) mais on ne peut les retirer qu'à partir du dessus de la pile.
Si vous savez ce qu'est la pile vous pouvez sauter le paragraphe suivant.
Cette pile d'exécution sert au bon déroulement du programme pour:
- stocker les variables locales.
- stocker les paramètres lors d'appels de fonctions.
- stocker les paramètres de convention d'appel des fonctions. ( On veut appeler une fonction: on stocke la valeur de chaque paramètre dans la pile puis on stocke l'adresse de retour (c'est à dire là où il faudra reprendre quand la fonction fera son return) on stocke l'adresse de la base de la pile (je ne sais plus dans quel ordre avec l'adresse de retour) L'adresse de la base de la pile est simplement décalée pour que chaque fonction puisse utiliser cette adresse comme si la pile n'était que pour elle. Dans le cas des conventions d'appels C++ il y a encore un paramètre supplémentaire mais je ne sais plus lequel. (Mais celà jusitife tout simplement l'incompatibilité des appels et la nécessité du extern "C" pour rendre compatible le C++ avec le C lors d'exports de fonctions.
Pour résoudre le problème et travailler avec les tailles souhaitées pour les tableaux on peut:
Déclarer les tableaux dans l'environnement global (en dehors de toute fonction donc, et c'est ce que je ferais ici car le programme est court)
Ou
Allouer dynamiquement les tableaux.
Et voilou.
M.
En effet, j'avais fait un léger test hier soir et plouf !
Le problème n'est pas la taille mais l'endroit. En temps que variables locales d'une fonction, tes tableaux sont stockés dans la pile. C'est comme une pile d'assiette, on stocke en ajoutant au dessus chaque fois, elles sont toutes visibles (accessibles) mais on ne peut les retirer qu'à partir du dessus de la pile.
Si vous savez ce qu'est la pile vous pouvez sauter le paragraphe suivant.
Cette pile d'exécution sert au bon déroulement du programme pour:
- stocker les variables locales.
- stocker les paramètres lors d'appels de fonctions.
- stocker les paramètres de convention d'appel des fonctions. ( On veut appeler une fonction: on stocke la valeur de chaque paramètre dans la pile puis on stocke l'adresse de retour (c'est à dire là où il faudra reprendre quand la fonction fera son return) on stocke l'adresse de la base de la pile (je ne sais plus dans quel ordre avec l'adresse de retour) L'adresse de la base de la pile est simplement décalée pour que chaque fonction puisse utiliser cette adresse comme si la pile n'était que pour elle. Dans le cas des conventions d'appels C++ il y a encore un paramètre supplémentaire mais je ne sais plus lequel. (Mais celà jusitife tout simplement l'incompatibilité des appels et la nécessité du extern "C" pour rendre compatible le C++ avec le C lors d'exports de fonctions.
Pour résoudre le problème et travailler avec les tailles souhaitées pour les tableaux on peut:
Déclarer les tableaux dans l'environnement global (en dehors de toute fonction donc, et c'est ce que je ferais ici car le programme est court)
Ou
Allouer dynamiquement les tableaux.
double *p = NULL; p = (double*) malloc( X * sizeof( double ) ); // Avec X le nombre de doubles voulus. if ( p!= NULL ) { ... for ( unsigned int i = 0 ; i != X ; i++ ) p[i] = // notation identique à celle des tableaux ... free( p ); // Fin d'utilisation, libération de la mémoire allouée. }
Et voilou.
M.