Segmentation fault Linux
safir
-
blurk Messages postés 487 Statut Membre -
blurk Messages postés 487 Statut Membre -
Bonjour,
J'ai compilé un petit programme "debug.pc" de test sous linux et j'ai eu une erreur de Segmentation fault a l execution ( pas d erreurs a la compile ).
Ce meme programme s execute sous HPUX sans problemes.
Remarque :
Lorsque je declare les deux structures st_test1 et st_test2 ===> Il y a segmentation fault. Par contre si je ne declare que une d entre elles ou diminue la taille de TAB1,TAB2 ou TAB3 le programme s execute normalement.
Merci de votre aide.
Voilà le contenu du programme :
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
EXEC SQL INCLUDE SQLCA;
main(argc,argv)
int argc;
char *argv[];
{
#define AFFICHAGE 100
#define TAB1 1000
#define TAB2 60000
#define TAB3 50000
/* Table test1 */
typedef struct st_test1 { /* Si cette declaration est en commentaire, le programme marche */
double taille;
char rec_1[6];
};
struct st_test1 tab_test1[TAB3];
/* Table test2 */
typedef struct st_test2 {
char vp[2];
char car[3];
char marque[4];
char modele[11];
char energie[2];
};
struct st_test2 tab_test2[TAB2];
printf("\n");
printf("################################\n");
printf("### ###\n");
printf("### PROG DEBUG ###\n");
printf("### ###\n");
printf("################################\n");
printf("\n");
exit(0);
} /* Fin de la fonction main */
J'ai compilé un petit programme "debug.pc" de test sous linux et j'ai eu une erreur de Segmentation fault a l execution ( pas d erreurs a la compile ).
Ce meme programme s execute sous HPUX sans problemes.
Remarque :
Lorsque je declare les deux structures st_test1 et st_test2 ===> Il y a segmentation fault. Par contre si je ne declare que une d entre elles ou diminue la taille de TAB1,TAB2 ou TAB3 le programme s execute normalement.
Merci de votre aide.
Voilà le contenu du programme :
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
EXEC SQL INCLUDE SQLCA;
main(argc,argv)
int argc;
char *argv[];
{
#define AFFICHAGE 100
#define TAB1 1000
#define TAB2 60000
#define TAB3 50000
/* Table test1 */
typedef struct st_test1 { /* Si cette declaration est en commentaire, le programme marche */
double taille;
char rec_1[6];
};
struct st_test1 tab_test1[TAB3];
/* Table test2 */
typedef struct st_test2 {
char vp[2];
char car[3];
char marque[4];
char modele[11];
char energie[2];
};
struct st_test2 tab_test2[TAB2];
printf("\n");
printf("################################\n");
printf("### ###\n");
printf("### PROG DEBUG ###\n");
printf("### ###\n");
printf("################################\n");
printf("\n");
exit(0);
} /* Fin de la fonction main */
A voir également:
- Segmentation fault Linux
- Linux reader - Télécharger - Stockage
- R-linux - Télécharger - Sauvegarde
- Backtrack linux - Télécharger - Sécurité
- Toutou linux - Télécharger - Systèmes d'exploitation
- Linux mint 22.1 - Accueil - Linux
3 réponses
Salut!
me parait douteux et pas standard. Macro non définie?
aucun type pour la fonction main et l'utilisaiton de 2 arguments non déclarés (type) avant leur utilisation
on a pour habitude de déclarer les macro en début de code (c'est plus jolie) mais dans ton code ça n'apporte pas plus de clarté de déclarer ces macros
pourquoi faire un typedef ici qui ne sert à rien?
idem
A mon avis le compilo a du trouver une mauvaise définition du type par typedef
normalement ça devrait ressembler à un ça
permet moi de remodeler ton code d'un façon plus clair à mes yeux
EXEC SQL INCLUDE SQLCA;
me parait douteux et pas standard. Macro non définie?
main(argc,argv)
aucun type pour la fonction main et l'utilisaiton de 2 arguments non déclarés (type) avant leur utilisation
#define AFFICHAGE 100 #define TAB1 1000 #define TAB2 60000 #define TAB3 50000
on a pour habitude de déclarer les macro en début de code (c'est plus jolie) mais dans ton code ça n'apporte pas plus de clarté de déclarer ces macros
/* Table test1 */
typedef struct st_test1 { /* Si cette declaration est en commentaire, le programme marche */
double taille;
char rec_1[6];
};
struct st_test1 tab_test1[TAB3];
pourquoi faire un typedef ici qui ne sert à rien?
/* Table test2 */
typedef struct st_test2 {
char vp[2];
char car[3];
char marque[4];
char modele[11];
char energie[2];
};
struct st_test2 tab_test2[TAB2];
idem
A mon avis le compilo a du trouver une mauvaise définition du type par typedef
normalement ça devrait ressembler à un ça
typedef ancientype nouveautype;
permet moi de remodeler ton code d'un façon plus clair à mes yeux
#include <stdlib.h>
#include <stdio.h>
typedef
struct
{
double taille;
char rec_1[6];
}
st_test1;
typedef
struct
{
char vp[2];
char car[3];
char marque[4];
char modele[11];
char energie[2];
}
st_test2;
int main(int argc, char *argv[])
{
st_test1 tab_test1[50000];
st_test2 tab_test2[60000];
printf("\n");
printf("################################\n");
printf("### ###\n");
printf("### PROG DEBUG ###\n");
printf("### ###\n");
printf("################################\n");
printf("\n");
return EXIT_SUCCESS;
}
salut!
y'a juste un truc qui me chagrine dans cette source
j'aurais plutôt fait comme ça:
segmentation fault, la plupart du temps c'est un
pointeur auquel on n'a pas alloué assez de mémoire
(ici l'allocation est faite implicitement)
cordialement
¤
y'a juste un truc qui me chagrine dans cette source
j'aurais plutôt fait comme ça:
int main(int argc, char *argv[])
{
return 0;
}
segmentation fault, la plupart du temps c'est un
pointeur auquel on n'a pas alloué assez de mémoire
(ici l'allocation est faite implicitement)
cordialement
¤
salut,
Je viens de penser à un truc:
struct st_test1 tab_test1[50000]
j'ai déjà eu ce problème avec un enorme tableau statique du même genre.
ce que j'ai fait:
seulement il faut le déclarer dans une fonction et le passer par pointeur aux autres fonctions. Voilà, si ça peut te servir...
cordialement
¤
Je viens de penser à un truc:
struct st_test1 tab_test1[50000]
j'ai déjà eu ce problème avec un enorme tableau statique du même genre.
ce que j'ai fait:
// debut de la fonction
struct st_test1 *tab_test1=
(struct *st_test1) malloc (50000*sizeof(*tab_test1));
if(tab_test1==null)printf("probleme d'allocation");
//
//
//
// fin de fonction:
free (tab_test1);
seulement il faut le déclarer dans une fonction et le passer par pointeur aux autres fonctions. Voilà, si ça peut te servir...
cordialement
¤
Jai utilisé le code après tes remarques et j'ai toujours la meme erreur.
Mais quand je mets la ligne :
st_test1 tab_test1[50000];
en commentaire ou je remplace 50000 par une taille plus petite ça marche.
Pour EXEC SQL INCLUDE SQLCA; C'est parce que c'est un PRO*C. Mais en tout cas on peut utiliser que le .c généré.
Merci