Probléme d'allocation mémoire ?

templeofboom Messages postés 41 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 21 juin 2005 - 11 déc. 2004 à 10:57
memspell Messages postés 4 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 23 janvier 2010 - 22 janv. 2010 à 00:35
dans le cadre du développement d'une application de socket sous devcpp je me retrouve bizarrement coincé a cause d'une erreur d'allocation mémoire à la création d'une nouvelle instance d'une classe
cliente qui doit effectuer le traitement lié au message reçu.

ma classe cliente recoit en paramètre un entier( descripteur de la socket cliente créé) et une structure de donnée contenant des tableau de taill fixe.
mon code est du style :

void socket_serveur::ecouter()
{
if(listen(sock_serveur,5)==-1) //socket en ecoute avec file d'attente de 5
perror("\nerreur de listen") ;

while(1)
{
longueur_client= sizeof(adresse_client) ;
//fcntl(sock_client,F_SETFL,O_NONBLOCK); //rend le accept non bloquant
if((sock_client = accept(sock_serveur,(struct sockaddr*)&adresse_client,/*(socklen_t*)*/&longueur_client))<0)
{
perror("\nErreur nouvelle socket") ;

}

if(sock_client>=0)
{
socket_serveur::lire();
cout<<"le message a rechercher est"<<s1.message<<endl;
cout<<"la couleur est"<<s1.couleur<<endl;

client = new Cclientdb( s1, sock_client);

}

}
est ce que le passage d'une structure en paramètre pose probléme?


Temple0fb00m

3 réponses

cs_AmiraS Messages postés 10 Date d'inscription vendredi 21 mai 2004 Statut Membre Dernière intervention 21 décembre 2007
11 déc. 2004 à 15:07
les listes chaines dans lelangage C++ avec interface graphique
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
11 déc. 2004 à 18:02
"est ce que le passage d'une structure en paramètre pose probléme?"
ben moi je passerai plutot un pointeur, mais j'y connais rien aux sockets, ca doit surement poser un pb
______________________
Omnia vincit labor improbus
0
memspell Messages postés 4 Date d'inscription jeudi 21 janvier 2010 Statut Membre Dernière intervention 23 janvier 2010
22 janv. 2010 à 00:35
longueur_client= sizeof(adresse_client) ;
//fcntl(sock_client,F_SETFL,O_NONBLOCK); //rend le accept non bloquant
if((sock_client = accept(sock_serveur,(struct sockaddr*)&adresse_client,/


Hello,

Tu fait un sizeof sur la variable... au lieu du type, si tu as fait une allocation dynamique pour allouer adresse_client il est fort probable que l'appel à accept avec la mauvaise taille est corrompu le heap.

Essaye sizeof(struct sockaddr)

Cédric
www.memspell.com
C++ Memory Allocator haute performance.
0
Rejoignez-nous