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

yansei 5 Messages postés mercredi 4 juin 2008Date d'inscription 18 juin 2008 Dernière intervention - 4 juin 2008 à 15:57 - Dernière réponse : yansei 5 Messages postés mercredi 4 juin 2008Date d'inscription 18 juin 2008 Dernière intervention
- 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
yansei 5 Messages postés mercredi 4 juin 2008Date d'inscription 18 juin 2008 Dernière intervention - 4 juin 2008 à 16:22
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 -->

Merci yansei 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de yansei
Meilleure réponse
Pistol_Pete 1055 Messages postés samedi 2 octobre 2004Date d'inscription 9 juillet 2013 Dernière intervention - 4 juin 2008 à 16:57
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+

Merci Pistol_Pete 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

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

Merci luhtor 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de luhtor
Meilleure réponse
Pistol_Pete 1055 Messages postés samedi 2 octobre 2004Date d'inscription 9 juillet 2013 Dernière intervention - 4 juin 2008 à 17:49
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+

Merci Pistol_Pete 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de Pistol_Pete
Meilleure réponse
yansei 5 Messages postés mercredi 4 juin 2008Date d'inscription 18 juin 2008 Dernière intervention - 5 juin 2008 à 10:23
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.

Merci yansei 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de yansei
Meilleure réponse
yansei 5 Messages postés mercredi 4 juin 2008Date d'inscription 18 juin 2008 Dernière intervention - 5 juin 2008 à 10:52
3
Merci
Bon tout fonctionne correctement.


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


Bien amicalement


yansei

Merci yansei 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de yansei
Pistol_Pete 1055 Messages postés samedi 2 octobre 2004Date d'inscription 9 juillet 2013 Dernière intervention - 4 juin 2008 à 16:14
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.