Erreur de segmentation ???
Utilisateur anonyme
-
kilian Messages postés 8854 Statut Modérateur -
kilian Messages postés 8854 Statut Modérateur -
Bonjour,
Je développe un petit programme en C sous Linux.
J'ai un petit problème de segmentation j'ai beau chercher l'erreur et lire des article parlant des pointeurs je ne trouve pas l'erreur.
Voici le code :
J'ai essayer de debugger le programme avec gdb voila ce que j'obtiens
Je ne vois pas ou est le problème.
Merci d'avance
Je développe un petit programme en C sous Linux.
J'ai un petit problème de segmentation j'ai beau chercher l'erreur et lire des article parlant des pointeurs je ne trouve pas l'erreur.
Voici le code :
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#define IP "127.0.0.468"
#define PORT 51
int main(int argc, char *argv[])
{
int sockDescripteur; // Descripteur du socket ( premetd'identifier le socket)
char buffer[]; // Buffer ou stocker les informations recu
struct sockaddr_in serv_addr; // On declare la structure qui nous servira a configurer le serveur
struct sockaddr_in client_addr;
// Ouverture d'un socket
sockDescripteur = socket(AF_INET, SOCK_DGRAM , 0);
if (sockDescripteur < 0)
{
printf("ERREUR : Ouverture du socket impossible\n\n");
}
else
{
printf("Ouverture du socket [ OK ]\n");
// Configuration du serveur
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(IP);
serv_addr.sin_port = htons(PORT);
// Configurer l'adresse et le port
int s_bind;
s_bind = bind(sockDescripteur, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
if (s_bind < 0)
{
printf("ERREUR : Configuration du socket impossible\n\n");
}
else
{
printf("Configuration du socket [ OK ]\n");
// Configurer le nombre d'ecoutes
listen(sockDescripteur, 5);
int exit_erreur = 1;
while(exit_erreur < 0)
{
// Accepter une connexion
int client_len;
client_len = sizeof(client_addr);
int s_accept;
s_accept = accept(sockDescripteur, (struct sockaddr *) &client_addr, &client_len);
if (s_accept < 0)
{
printf("ERREUR : Acceptation impossible\n\n");
exit_erreur = -1;
}
else
{
printf("Connection [ OK ]\n");
// Recevoir des donnees
int s_recv;
s_recv = recv(sockDescripteur, buffer, sizeof(buffer),0);
if (s_recv < 0)
{
printf("ERREUR : Reception des donnees impossible\n\n");
exit_erreur = -1;
}
else
{
printf("Le serveur a recu la requette :\n %s",buffer);
}
// Emettre des donnees
char * msg;
msg = "It's OK /n Good Job";
//scanf("%s", &msg);
//if (msg == "quit")
// {
// return(0);
// }
//printf("%s", msg);
//send(sockDescripteur, msg, sizeof(msg), MSG_OOB);
}
// Deconnecter le client
shutdown(sockDescripteur, SHUT_RDWR);
} // Fin de la boucle
}
// Fermeture du socket
close(sockDescripteur);
}
printf(errno);
return(0);
}
J'ai essayer de debugger le programme avec gdb voila ce que j'obtiens
me@debian:~$ gdb ./tests GNU gdb 6.7.1-debian Copyright (C) 2007 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i486-linux-gnu"... Using host libthread_db library "/lib/i686/cmov/libthread_db.so.1". (gdb) run Starting program: /home/jerome/tests Ouverture du socket [ OK ] ERREUR : Configuration du socket impossible Program received signal SIGSEGV, Segmentation fault. 0xb7eea227 in strchrnul () from /lib/i686/cmov/libc.so.6 (gdb) where #0 0xb7eea227 in strchrnul () from /lib/i686/cmov/libc.so.6 #1 0xb7eb40c9 in vfprintf () from /lib/i686/cmov/libc.so.6 #2 0xb7ebd1d3 in printf () from /lib/i686/cmov/libc.so.6 #3 0x08048794 in main () at test_sock.c:100 (gdb)
Je ne vois pas ou est le problème.
Merci d'avance
A voir également:
- Erreur de segmentation ???
- Erreur upes 1025 - Forum Téléviseurs
- Erreur t32 ✓ - Forum Livebox
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Une erreur s'est produite instagram ✓ - Forum Instagram
- Erreur 0x80070643 - Accueil - Windows
4 réponses
Salut,
printf(errno); est à remplacer par printf("%d\n", errno);
errno est un entier, pas une chaine. Quand tu mets un seul argument dans printf, il considère que c'est une chaine ;-)
printf(errno); est à remplacer par printf("%d\n", errno);
errno est un entier, pas une chaine. Quand tu mets un seul argument dans printf, il considère que c'est une chaine ;-)
ok
je modifie sa tous de suite
J'avoue que je n'est pas fais attention au warning de gcc
Mais j'étais pus concentrer sur le problème de segmentation
Enfin Merci quand même.
Et sinon pour le problème de segmentation tu n'as pas une idée ?
je modifie sa tous de suite
J'avoue que je n'est pas fais attention au warning de gcc
Mais j'étais pus concentrer sur le problème de segmentation
Enfin Merci quand même.
Et sinon pour le problème de segmentation tu n'as pas une idée ?
bonjour,
bon je t'avoue que le C n'est pas ma tasse de thé mais je suis intrigué par quelque chose si tu pouvais me renseigné ^^
s_accept = accept(sockDescripteur, (struct sockaddr *) &client_addr, &client_len);
client_len est un entier donc ce n'est pas nécessaire de mettre un &, je me trompe?
bon je t'avoue que le C n'est pas ma tasse de thé mais je suis intrigué par quelque chose si tu pouvais me renseigné ^^
s_accept = accept(sockDescripteur, (struct sockaddr *) &client_addr, &client_len);
client_len est un entier donc ce n'est pas nécessaire de mettre un &, je me trompe?