Erreur de segmentation (core dumped) [Résolu]

Messages postés
5
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008
- - Dernière réponse : 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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
5
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008
3
Merci
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 -->

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 153 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yansei
Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
3
Merci
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+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 153 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Pistol_Pete
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
4
3
Merci
Commence par  agrandir ton tableau de caractère, 30 c'est trop petit, t'as oublié le 0 terminal.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 153 internautes nous ont dit merci ce mois-ci

Commenter la réponse de luhtor
Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
3
Merci
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+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 153 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Pistol_Pete
Messages postés
5
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 153 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yansei
Messages postés
5
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008
3
Merci
Bon tout fonctionne correctement.


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


Bien amicalement


yansei

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 153 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yansei
Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
2
Merci
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+
Commenter la réponse de Pistol_Pete