Erreur de segmentation (core dumped)
srakawa
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Avec ce code qui compile bien, je sais bien qu'il s'agit d'un pb de mémoire
La plus longue variable fera moins de 80 caractères.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAILLE_MAX 10000
char *str_sub (const char *s, unsigned int start, unsigned int end)
{
char *new_s = NULL;
if (s != NULL && start < end)
{
/* (1)*/
new_s = malloc (sizeof (*new_s) * (end - start + 2));
if (new_s != NULL)
{
int i;
/* (2) */
for (i = start; i <= end; i++)
{
/* (3) */
new_s[i-start] = s[i];
}
new_s[i-start] = '\0';
}
else
{
fprintf (stderr, "Memoire insuffisante\n");
exit (EXIT_FAILURE);
}
}
return new_s;
}
int main(void)
{
FILE* fichier = NULL;
char *prov = malloc (sizeof (*prov) * 256);
char chaine[TAILLE_MAX] = "";
char *extrait = malloc (sizeof (*extrait) * 256);
char *httpd_root = malloc (sizeof (*httpd_root) * 256);
char *conf = malloc (sizeof (*conf) * 256);
char *chemin_conf = malloc (sizeof (*chemin_conf) * 256);
char *commande = malloc (sizeof (*commande) * 1024);
commande = "grep 'DocumentRoot' ";
//char* prov;
int taille;
system ("clear");
printf ("======================================================================\n");
printf ("| |\n");
printf ("| Recherche de la racine des documents de votre serveur WEB |\n");
printf ("| |\n");
printf ("| |\n");
printf ("| (c) 2014 Michel Billard |\n");
printf ("| |\n");
printf ("======================================================================\n\n\n\n\n\n");
system ("grep 'DocumentRoot' /etc/httpd/conf/httpd.conf > fic1.cor");
system ("clear");
system ("httpd -V > fic.cor");
system ("clear");
printf ("======================================================================\n");
printf ("| |\n");
printf ("| Recherche de la racine des documents de votre serveur WEB |\n");
printf ("| |\n");
printf ("| |\n");
printf ("| (c) 2014 Michel Billard |\n");
printf ("| |\n");
printf ("======================================================================\n\n\n\n\n\n");
fichier = fopen ("fic.cor", "r");
if (fichier == NULL)
{
printf("Impossible d'ouvrir le fichier fic.txt");
return -1;
}
else
{
while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
{
extrait = strstr (chaine, "HTTPD_ROOT");
if (extrait != NULL)
{
prov = strstr(extrait, "/");
taille= strlen(prov);
strncpy (httpd_root, prov, taille-2);
}
extrait = strstr (chaine, " SERVER_CONFIG_FILE");
if (extrait != NULL)
{
prov = strstr(extrait, "\"");
taille= strlen(prov);
conf = str_sub(prov, 1, taille -3);// (conf, prov, taille-2);
chemin_conf = strcat(httpd_root, "/");
chemin_conf = strcat(chemin_conf, conf);
printf ("%s: %s\n\n", "Voici le chemin de httpd.conf", chemin_conf);
}
}
fclose (fichier);
//fonctionne parfaitement si je commente la ligne ci-dessous
commande = strcat(commande, chemin_conf);
printf("La commande à taper est %s%s\n\n", commande, chemin_conf);
}
return 0;
}
La plus longue variable fera moins de 80 caractères.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAILLE_MAX 10000
char *str_sub (const char *s, unsigned int start, unsigned int end)
{
char *new_s = NULL;
if (s != NULL && start < end)
{
/* (1)*/
new_s = malloc (sizeof (*new_s) * (end - start + 2));
if (new_s != NULL)
{
int i;
/* (2) */
for (i = start; i <= end; i++)
{
/* (3) */
new_s[i-start] = s[i];
}
new_s[i-start] = '\0';
}
else
{
fprintf (stderr, "Memoire insuffisante\n");
exit (EXIT_FAILURE);
}
}
return new_s;
}
int main(void)
{
FILE* fichier = NULL;
char *prov = malloc (sizeof (*prov) * 256);
char chaine[TAILLE_MAX] = "";
char *extrait = malloc (sizeof (*extrait) * 256);
char *httpd_root = malloc (sizeof (*httpd_root) * 256);
char *conf = malloc (sizeof (*conf) * 256);
char *chemin_conf = malloc (sizeof (*chemin_conf) * 256);
char *commande = malloc (sizeof (*commande) * 1024);
commande = "grep 'DocumentRoot' ";
//char* prov;
int taille;
system ("clear");
printf ("======================================================================\n");
printf ("| |\n");
printf ("| Recherche de la racine des documents de votre serveur WEB |\n");
printf ("| |\n");
printf ("| |\n");
printf ("| (c) 2014 Michel Billard |\n");
printf ("| |\n");
printf ("======================================================================\n\n\n\n\n\n");
system ("grep 'DocumentRoot' /etc/httpd/conf/httpd.conf > fic1.cor");
system ("clear");
system ("httpd -V > fic.cor");
system ("clear");
printf ("======================================================================\n");
printf ("| |\n");
printf ("| Recherche de la racine des documents de votre serveur WEB |\n");
printf ("| |\n");
printf ("| |\n");
printf ("| (c) 2014 Michel Billard |\n");
printf ("| |\n");
printf ("======================================================================\n\n\n\n\n\n");
fichier = fopen ("fic.cor", "r");
if (fichier == NULL)
{
printf("Impossible d'ouvrir le fichier fic.txt");
return -1;
}
else
{
while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
{
extrait = strstr (chaine, "HTTPD_ROOT");
if (extrait != NULL)
{
prov = strstr(extrait, "/");
taille= strlen(prov);
strncpy (httpd_root, prov, taille-2);
}
extrait = strstr (chaine, " SERVER_CONFIG_FILE");
if (extrait != NULL)
{
prov = strstr(extrait, "\"");
taille= strlen(prov);
conf = str_sub(prov, 1, taille -3);// (conf, prov, taille-2);
chemin_conf = strcat(httpd_root, "/");
chemin_conf = strcat(chemin_conf, conf);
printf ("%s: %s\n\n", "Voici le chemin de httpd.conf", chemin_conf);
}
}
fclose (fichier);
//fonctionne parfaitement si je commente la ligne ci-dessous
commande = strcat(commande, chemin_conf);
printf("La commande à taper est %s%s\n\n", commande, chemin_conf);
}
return 0;
}
A voir également:
- Erreur de segmentation (core dumped)
- Open core legacy patcher - Accueil - MacOS
- Core temp - Télécharger - Divers Utilitaires
- Core ftp - Télécharger - Téléchargement & Transfert
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
1 réponse
Bonjour,
Pourquoi enlever le "Bonjour" placé automatiquement ???
Merci de faire usage de plus de politesse.
De plus, votre code est illisible (il faut utiliser les balises "code c" prévues à cet effet).
Du coup, je n'ai pas tout lu.
Mais déjà :
new_s = malloc (sizeof (*new_s) * (end - start + 2));
for (i = start; i <= end; i++)
i doit aller de 0 à end-start+2 (non compris).
char *commande = malloc (sizeof (*commande) * 1024);
commande = "grep 'DocumentRoot' ";
Fuite de mémoire... Soit tu fais char *commande="grep 'DocumentRoot' "; soit tu fais char*commande=malloc(...); puis strcpy(commande,"grep 'DocumpentRoot' ");
Pour info, les commandes system() sont à éviter... Sinon, autant faire du shell...
Pourquoi enlever le "Bonjour" placé automatiquement ???
Merci de faire usage de plus de politesse.
De plus, votre code est illisible (il faut utiliser les balises "code c" prévues à cet effet).
Du coup, je n'ai pas tout lu.
Mais déjà :
new_s = malloc (sizeof (*new_s) * (end - start + 2));
for (i = start; i <= end; i++)
i doit aller de 0 à end-start+2 (non compris).
char *commande = malloc (sizeof (*commande) * 1024);
commande = "grep 'DocumentRoot' ";
Fuite de mémoire... Soit tu fais char *commande="grep 'DocumentRoot' "; soit tu fais char*commande=malloc(...); puis strcpy(commande,"grep 'DocumpentRoot' ");
Pour info, les commandes system() sont à éviter... Sinon, autant faire du shell...