Taille max d'un buffer

cs_bouzazi Messages postés 27 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 12 novembre 2012 - 4 déc. 2008 à 15:25
cs_bouzazi Messages postés 27 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 12 novembre 2012 - 4 déc. 2008 à 17:32
Ce si est un bout de code de mon programme "lss":


    long pduLen;    

    int maxPduLength

    //maxPduLength_ if it is set to 0 this mean thatno control is done in the PDU size

    //if the value is 0 , the maxPduLength will not be taken into account

    //pduLen is the real PDU length


    SSC_DebugTrace <<"maxPduLength_ is set to "<< maxPduLength_ << endl;

    if(maxPduLength_ != 0)

    {

        if (pduLen > maxPduLength_)

            pduLen = maxPduLength_;

    }        

       SSC_DebugTrace <<"PduLen is set to "<< pduLen << endl;

    

       char* buf = new char[pduLen + 1l];

       result = receiveSocketData(buf, (int) pduLen);


Ce programme Marche a merveille ( su plusieurs machine LINUX SUN HP).

a l'exception d'une machine "HP-UX ipb228 B.11.23 U ia64 1545032245" c'est une HP Itamium.

dans ma console j'ai le message suivant:


End of LSS initialisation.

aCC runtime: Uncaught exception of type "bad_alloc".

[HP ARIES32]: Error occured while writing core file for 32 bit

[HP ARIES32]: PA-RISC application /alu/1350OMS9.1/NMC/SEC/7.2.1/lss/bin/lss (got signal 6).

[HP ARIES32]: Core file may not be correct.


dans les fichiers de traces j'ai le message suivant:

  -->SLAC_Sock::fdOk

  <--SLAC_Sock::fdOk

  maxPduLength_ is set to 0

  PduLen is set to 1195986768

  EndLSS by signal 6.


je ne sais pas exactement la cause de se crache de se programme (lss).

Mais je pense que ce problème est due au dépassement de la taille max que je peu alloue a un buffer dans cette machine.

c'est possible aussi que la PDU soit corrompu ou bien sans le caractère NULL (\0) en fin de PDU.


Est ce qu'il a quelqu'un qui peut me dire si le problème provient de l'un des causes que j'ai évoque.

Est ce qu'il a quelqu'un qui peu me donne une façon en c++ comment je
peu prévenir c'est deux problème (taille max du buffer sur une machine,
PDU corrompu).


Merci

2 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
4 déc. 2008 à 16:36
salut

l'utilisation de long et int, c'est pas beau, surtout qu'en 64bits :
- long : 8 octets
- int : 4 octets

Tu as recompilé ton exe sur la machine 64bits ? Ou est ce que tu balades ton exe généré sur ta machine de dév ?
0
cs_bouzazi Messages postés 27 Date d'inscription mardi 25 mars 2003 Statut Membre Dernière intervention 12 novembre 2012
4 déc. 2008 à 17:32
Salut,

merci pour la réponse. Mais je ne pense pas que la combinaison int/long soit l'origine du problème pour deux raison:

1/ces deux variables sont la pour être comparé et savoir si on va
utilise la taille du PDU ou bien le MaxPduLength_ pour la création du
buffer.

2/ les traces de mon programmes montre que le le crach surviens après
cette partie et que le test et l'utilisation de ces 2 variables.


la compilation ce fait sur une machine 64bits

et a ce que je sache le problème surviens sur une machine 64bits
0
Rejoignez-nous