Erreur de segmentation (core dumped)

Résolu
yansei Messages postés 5 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 18 juin 2008 - 4 juin 2008 à 15:57
yansei Messages postés 5 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 18 juin 2008 - 5 juin 2008 à 10:52
Je suis en train d'essayer de créer un programme qui a pour but de changer la date du système et de créer (à chaque changement de date) deux fichiers quelconques.


Voici mon programme actuel:



#include <stdio.h>
#include <time.h>



int main()
{
char *nomfic;
int i;
FILE *sortie;



for(i=0; i<100; i++)
{
sprintf(nomfic, "home/denis/Stage/save/fic1%d", i);
sortie=fopen(nomfic, "w");
fclose(sortie);
sprintf(nomfic, "/home/denis/Stage/save/fic2%d", i);
sortie=fopen(nomfic, "w");
fclose(sortie);
system("date -s yesterday");
}
system("date -s 06/04/2008");
printf("Fin du programme \n";
}


Donc, je compile le programme et tout va bien, malheureusement dès que je veux l'exécuter il me marque: "Erreur de segmentation (core dumped)".


J'ai chercher dans pas mal de doc et je ne vois pas où est le problème.


Merci de m'aider (si possible essayer de commenter les solutions que vous me donnerez afin que je comprenne ce que vous me donnez).


yansei
A voir également:

7 réponses

yansei Messages postés 5 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 18 juin 2008
4 juin 2008 à 16:22
Je viens d'apporter quelque changement.

Mon nouveau code:

#include <stdio.h>
#include <time.h>

int main()
{
char fic[30];
int i;
FILE *sortie;

for(i=0; i<100; i++)
{
sprintf(fic, "home/denis/Stage/save/fic1%d", i);
sortie=fopen(fic, "w");
fclose(sortie);
sprintf(fic, "/home/denis/Stage/save/fic2%d", i);
sortie=fopen(fic, "w");
fclose(sortie);
system("date -s yesterday");
}
system("date -s 06/04/2008");
printf("Fin du programme \n";
}

Cela m'enlève effectivement mon soucis d'erreur de segmentation.

Toute fois, et du fait que j'ai pus allez plus loin grâce à ce merveilleux conseil, j'ai désormais un second problème:

Cela ne me crée pas le nombre de fichier espéré, je n'ai que deux fichier intitulé: fic1100 et fic2100.
Chose assez bizzare car cela voudrait dire que je ne crée que les deux derniers fichiers ???

Un conseil ???<!-- / message -->
3
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
4 juin 2008 à 16:57
Etrange en effet, chez moi ca marche sans probleme.
Essaye de mettre un break point apres chaque creation de fichier et regarde s'il a bien ete cree dans ton repertoire.

Et test bien ta variable sortie aussi.

A+
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
4 juin 2008 à 17:36
Commence par  agrandir ton tableau de caractère, 30 c'est trop petit, t'as oublié le 0 terminal.
3
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
4 juin 2008 à 17:49
Oui c'est vrai.
C'est correct pour ton premier sprintf, ya 29 char + 1 pour le zero terminal mais pas pour ton second sprintf: ya 1 caractere de plus (le / au debut de ta chaine)

Il n'empeche que ca devrait marcher pour tous, SAUF pour le dernier fichier fic2100.

A+
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yansei Messages postés 5 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 18 juin 2008
5 juin 2008 à 10:23
Je vous remercie pour ces conseils, je viens de fair des modifications (comme allouer 40 au lieu de 30).

Je viens également de vérifier le bon fonctionnement de mes fopen et tout fonctionne correctement.

Chose des plus bizzare, il semble que mon programme ne fonctionne seulement qu'en je m'identifie en "sudo".

J'ai pensé au début que cela était du au fait que j'appel une modification de date, mais quand je passe les changement de date en commentaire (afin qu'ils ne soient pas pris en compte lors de la compilation et de l'exécution du programme), je m'apperçoie qu'il est quand même nécessaire que je soit en root.
3
yansei Messages postés 5 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 18 juin 2008
5 juin 2008 à 10:52
Bon tout fonctionne correctement.


Je remercie tout le monde pour l'aide que vous m'avez apporter.


Bien amicalement


yansei
3
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
4 juin 2008 à 16:14
Salut

Tu n'as pas alloué de memoire pour le pointeur nomfic. tu ecris donc dans des cases ou tu n'as pas le droit d'ecrire d'ou l'erreur de segmentation.

Et autre chose il faut TOUJOURS tester les resultats des fonctions.

Ici, tu utilises "sortie" sans savoir s'il pointe sur quelque chose...

Insere un petit test apres l'ouverture de ton fichier:
if(sortie ==0) 
   printf("erreur\n");

A+
2
Rejoignez-nous