begin process at 2012 05 30 01:42:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Divers

 > 

Problème d'allocation de tableau


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème d'allocation de tableau

mercredi 30 mai 2007 à 16:54:59 | Problème d'allocation de tableau

Loki6

Membre Club
Salut à tous, comme l'indique le sujet, j'essaie de remplir un tableau (tout bête me direz vous) et pis ben ça ne marche pas !

Contexte : C++ natif, avec MFC donc sous VS2005
                 Plateforme solution : Windows Mobile 2005 Emulateur

Je possède un tableau de chaines, chaque chaine étant composée de sous chaines séparées par des ;
comme ceci :
   L1    aaaaa;bbbbbbbbb;cccccccccc;dddddddddd;
    L2    eeeeeeeee;fffffffffff;gggggggggg;hhhhhhhh;
    L3    etc...

le but étant de stocker tout ça dans un autre tableau qui sépare chaque sous chaine pour plus de confort.
            C1   C2       C3   etc...
    L1   aaaaa   bbbb   ccccc  
    L2   eeeee   ffff   ggggg  
    etc...

Voici le code en cause :    m_strTabDBLine est un char ***, m_strTabBuffer un char ** et m_uiNbLignes un UINT
    char * pctmp, ctmp[100]={0};
    int k=0;

    m_strTabDBLine = new char ** [m_uiNbLignes];    // alloue les lignes
    for (UINT i=0;i<m_uiNbLignes;i++)
    {
        m_strTabDBLine[i] = new char * [nbfields];    // alloue le nombre de champs par ligne
        pctmp = m_strTabBuffer[i];                    // fixe le pointeur en début de ligne
        for (int j=0;j<nbfields;j++)
        {
            k=0;
            while(pctmp[k] != ';')           
                ctmp[k] = pctmp[k++];                // récupère chaque caractère entre deux ;
            ctmp[k] = '\0';

            m_strTabDBLine[i][j] = new char [strlen(ctmp)];   //initialise le champ à la bonne taille
            strcpy(m_strTabDBLine[i][j],ctmp);                // le remplit avec la chaine

            pctmp = strstr(pctmp,";")+1;                    // saute jusqu'au prochain champ
        }
    }

Si je structure le tableau m_strTabBuffer, dans mon exemple, il contient ces caractères :
Nom;Prenom;Adresse;Code Postal;Ville;Pays;

// valeurs
nom01;prenom01;
adresse01;CP01;ville01;pays01;
nom02;prenom02;adresse02;CP02;ville02;pays02;
etc...


J'ai noté le moment du bug avec la couleur et la mise en gras souligné.

Je trace donc l'exécution du programme et au début tout va bien.   Je vérifie les valeurs de mes variables tout se passe nickel.
Mais ensuite, lorsque le curseur atteint cette ligne, je fais F11 pour avancer en pas à pas et ça plante en me mettant ce message :

Unhandled exception at 0x03f8103c in OpenDB3.exe: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00299008.

et ça m'ouvre une page de code plex.cpp situé dans un dossier mfc de visual studio avec un curseur vert à l'endroit où j'ai mis ma flèche :

CPlex* PASCAL CPlex::Create(CPlex*& pHead, UINT_PTR nMax, UINT_PTR cbElement)
{
    ASSERT(nMax > 0 && cbElement > 0);
    if (nMax == 0 || cbElement == 0)
    {
        AfxThrowInvalidArgException();
    }

==>   CPlex* p = (CPlex*) new BYTE[sizeof(CPlex) + nMax * cbElement];
            // may throw exception
    p->pNext = pHead;
    pHead = p;  // change head (adds in reverse order for simplicity)
    return p;
}

Mes questions sont donc :
    - Savez vous pourquoi ça bug ?
    - Savez vous pourquoi ça ne bug pas avant ???

question subsidiaire   
    - Ai-je choisi le bon thème ?

Merci à toutes les bonnes âmes qui liront ce message et peut-être me répondront !

Loki
mercredi 30 mai 2007 à 17:00:45 | Re : Problème d'allocation de tableau

Loki6

Membre Club
au cas où ce ne soit pas très explicite, le bug survient à la ligne de code en rouge, lorsque ctmp == le mot en rouge dans le tableau et pas avant pour Nom;Prenom;Adresse;Code Postal;Ville;Pays; ni même pour nom01;prenom01;

de plus je me suis trompé :  // valeurs n'apparaît pas dans le tableau.

donc le tableau est :

Nom;Prenom;Adresse;Code Postal;Ville;Pays;
nom01;prenom01;
adresse01;CP01;ville01;pays01;
nom02;prenom02;adresse02;CP02;ville02;pays02;
etc...

voilà voilà merci à vous

Loki
mercredi 30 mai 2007 à 17:42:08 | Re : Problème d'allocation de tableau

saifer

Membre Club
Salut loki !
Alors alors, j'ai vu un vieu pote et jme suis dis qu'il fallait que je prenne la peine de tout lire, donc je vais voir ce que je peux faire !

Le bug survient lors de l'enregistrement de la première ligne du tableau au niveau du champs adresse ? donc tu n'arrives pas à enregistrer l'adresse, tu as essayé d'afficher la valeur de ctmp poru voir si dejà tu travailles avec la bonne chaîne ?


-{ Saifer }-
mercredi 30 mai 2007 à 17:49:43 | Re : Problème d'allocation de tableau

Loki6

Membre Club
yes man, en fait tu as lu des noms bateau car c'est des noms bateau réellement :D test oblige. en fait la toute première ligne passe toute seule, celle où y a pas de numéros. la deuxième, le nom et le prénom passent mais pas l'adresse.

bêtement j'ai constaté que ma chaine adresse01 était plus grande que toutes les autres déjà enregistrées. j'ai testé avec adresse0 mais ça passe pas évidemment :p

j'ai également essayé de voir la valeur de ctmp dans la fenêtre espion et il contient tout à fait ce que j'attends à chaque fois.

Loki
mercredi 30 mai 2007 à 17:53:33 | Re : Problème d'allocation de tableau

Loki6

Membre Club
d'ailleurs tu constateras que le bug survient au moment de l'allocation, pas du remplissage avec ctmp.

Loki
mercredi 30 mai 2007 à 17:58:45 | Re : Problème d'allocation de tableau

saifer

Membre Club
A première vu je ne vois pas, mais si tu m'envois ton code par mail, je regarderais, et je posterais la solution ici...

-{ Saifer }-
mercredi 30 mai 2007 à 17:59:43 | Re : Problème d'allocation de tableau

Loki6

Membre Club
volontier :D

Loki
mercredi 30 mai 2007 à 18:01:07 | Re : Problème d'allocation de tableau

saifer

Membre Club
Sinon par hasard, as tu vérifié que l'adresse que tu copies n'est pas plus grande que 100 caractères ?

-{ Saifer }-
mercredi 30 mai 2007 à 18:04:15 | Re : Problème d'allocation de tableau

saifer

Membre Club
Sinon lorsque tu fais un strlen(ctmp) tu as bien une valeur correct ? essai de remplacer strlen(ctmp) par une valeur à la con genre 20 octets, et utilise strncpy à la place de strcpy pour copier seulement les 20 premiers octets de l'adresse, et dis moi si ca fonctionne.

-{ Saifer }-
mercredi 30 mai 2007 à 18:10:46 | Re : Problème d'allocation de tableau

Loki6

Membre Club
en fait l'adresse ne peux pas être plus grande que 100 octets étant donné que l'adresse est : adresse01.
pour strlen(cmp) je ne sais pas mais puisque ça fonctionnait pour les autres... mais je vais essayer de tester.
par contre ca merdouille un peu là, jpense que je vais rentrer on continuera sur MSN.

Loki

1 2

Cette discussion est classée dans : tableau, char, pctmp, cplex, strtabdbline


Répondre à ce message

Sujets en rapport avec ce message

recuperer les valeurs de TEdit dans un tableau de char [ par ferrari ] Voici la partie de mon code je cree des TEdit de manieres dynamiques de la maniere suivante. TEdit **b; //declare en global dans le .h de ma classe b tableau de char -> string [ par alfred289 ] bonjour,j'utilise BOrland C++ builder 5 et j'essaie de transformer un tableau de caractères en sring et je trouve pas commentmerci de votre aide renvoie d'un tableau en char ds une fonction [ par TheBabyCool ] Comment peut on renvoyer un tableau de char du type :char i[][] dans une fonction ?Merci Gestion d'entrées/sorties sur fichier [ par macrow ] Bonjour, Voici mon source : #include #include #include #include #include //******************************************** fonction strlen [ par ToToL ] Voici mon probleme :je voudrai dans un tableau a deux dimetion savoir combien il reste de place dans les colone donc j'ai pensé a la fonction strlen c Tableau et char to int [ par Niníel ] Bonjour!J'ai un tableau: chTabStart[64] dans lequel je rentre un nombre dans le format suivant: d_25 pour un nombre décimale par exemple. Donc dans mo Tableau suite... [ par Niníel ] Alors voila ma 2ème question de la journée :-PJ'ai un tableau de caractères 64 position: char Tab[64], un compteur: int inCompter et un tableau de 1 p tableau [ par zeratul67 ] J'ai une fonction qui doit me renvoyer un tableau à deux dimensions, mais la taille de l'une des ces 2 dimensions est inconue. (tableau: char cp[x][25 Tableau de char* [ par alex1er ] Salut a tousJ'aimerais faire la déclaration suivante dans mon code : char * swSurface[]; //Tableau de char * doncSeulement, le compilo me jete car le tableau de chaines de char [ par JaguiJaguar ] Salut, je suis etudiant.je dois réaliser un prog en c qui lit une chaine de char, la stocke dans la premiere ligne d'un tableau char *tab[n]où n est l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales