IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

memcpy ou ostringstream::write: erreur dans la taille des donnees


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 42
    Par défaut memcpy ou ostringstream::write: erreur dans la taille des donnees
    Bonjour à tous,

    je souhaite serialiser un tableau 2D de float.
    Dès que la taille du tableau dépasse 16KB, mon programme plante avec un segmentation fault dans memcpy (meme pour ostream::write).

    Mon compilateur: MinGW 3.4.5 et son gdb

    voici les 2 morceaux de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    UINT nb_of_points = 100;
    int nb_raw = 4;
    float RawData[nb_of_points][nb_raw];
    //..... remplissage du tableau
     
    int RawDataSize = sizeof(float)*nb_raw*nb_of_points;
    cout << "RawDataSize = " <<RawDataSize<<endl;
     
    #ifdef MEMCOPY
     
    char *RawDataMem =new char[RawDataSize];
    memcpy(RawDataMem,&RawData[0][0],RawDataSize);
    cout <<"size_t max size= " << sizeof(size_t)<<endl;
    ostringstream RawOs;
    RawOs.write(RawDataMem,RawDataSize);
    string Rawstr =RawOs.str();
     
    #else //MEMCOPY
     
    ostringstream Ros;
    for(int i=0;i<nb_of_points;i++){
       Ros.write(reinterpret_cast<char *> (RawData[i]),(nb_raw*sizeof(float)));
    }
    string Rawstr= Ros.str();
     
    #endif //MEMCOPY
    Mon programme plante quand nb_of_points passe de 1300 à 1500.

    Je n'arrive pas à trouver une solution sur Google et je n'ai pas le source de "msvcrt!memcpy()" (derniere trace du debuggeur)

    Merci de aide
    Zerbynette

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    bonjour

    la méthode write peut générer des exceptions ce qui nous aidera dans le débogage.


    a -tu essayé de l'inclure dans un bloc try ?

  3. #3
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Tu es sûr que ton programme plante sur memcpy et non sur l'allocation de ton tableau ?

    Il se peut que ça soit du à un stack overflow.

    Essai plutôt d'allouer dynamiquement ton tableau.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2009
    Messages : 42
    Par défaut Merci pour vos reponses
    En effet, j'avais tellement modifié mon programme en ajoutant et deplacant des blocs, que oui, mon tableau etait mal alloué.

    Merci pour votre recul, chose qui me manquait.
    Zerbynette

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WCF] Limitation dans la taille des objets
    Par dev01 dans le forum Windows Communication Foundation
    Réponses: 3
    Dernier message: 30/08/2012, 08h18
  2. [Débutant] erreur dans la taille de l'image
    Par slaima15 dans le forum Images
    Réponses: 1
    Dernier message: 24/04/2011, 16h39
  3. Réponses: 8
    Dernier message: 06/03/2008, 16h32
  4. Réponses: 1
    Dernier message: 03/10/2007, 14h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo