begin process at 2012 05 29 21:40:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

problème de pointeur


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

problème de pointeur

samedi 30 décembre 2006 à 12:41:28 | problème de pointeur

Kurpeus1

Membre Club
Bonjour.

J'ai déjà posé la question il y a deux trois jours mais je n'ai pas eu de réponse satisfaisante. Je me permet de réxpliquer mon problème

j'ai une structure de la forme :

struct global
{
       char *typeAction;
       char *codebar;
       char *champ1;
       char *champ2;
       char *champ3;
       char *champ4;
       char *champ5;
};

dans un fonction  j'utilise cette structure :
   
 struct global *pData ;
     pData = malloc(sizeof(struct global));

cette fonction me retourne le pointeur sur la structure.

Comme je dois appeller cette fonction 4096 fois, j'ai crée un tableau de pointeur dans la fonction appellante :

    struct global * pTable[4096] ;

a chaque appelle je rempli une case de mon tableau :

pTable[ind]  = splitTxt( pBuffer, ';');

 pBuffer est un pointeur vers un buffer

Mon problème est que sur le coup pTable[ind] contient bien mes infos, et qu'au passage suivant, l'info précédente semble être détruite en partie

merci d'avance;

Bonne fêtes à tous



samedi 30 décembre 2006 à 13:54:22 | Re : problème de pointeur

JCDjcd

 struct global * pTable[4096] ;
 struct global (* pTable)[4096] ;

c'est pas la meme chose,
le premier c'est un pointeur sur un tableau a 4096 elements
le second est un tableau de 4096 pointeurs


Pourquoi faire simple quand on peut faire compliqué ?
samedi 30 décembre 2006 à 14:01:19 | Re : problème de pointeur

Kurpeus1

Membre Club
Ok moi ce que je veux justement, c'est un tableau de 4096 pointeurs sur des structures de type "global"

Comment s'appelle donc mon tableau ?

si je fais pTable[i] = split(pBuffer, ';'); j'obtient le message d'erreur suivant : left operand must be l-value
 sachant que la fonction  split retourne un pointeur sur un struct global
samedi 30 décembre 2006 à 15:16:52 | Re : problème de pointeur

Kurpeus1

Membre Club
un petit up,  j'ai besoin d'une réponse je galère.

comment définir un tableau de pointeur sur une structure et comment donner la à chaque pointeur de ce tableau une valeur ?
samedi 30 décembre 2006 à 16:58:21 | Re : problème de pointeur

juju12

struct MyStruct{...}
MyStruct*pArray=(MyStruct*)malloc(nElements*sizeof(MyStruct*)); // tableau de pointeurs
pour initialiser un élément i :
pArray[i]=malloc(sizeof(MyStruct));

samedi 30 décembre 2006 à 17:05:03 | Re : problème de pointeur

juju12

Désolé j'ai oublié un * et je sais pas comment (si on peut) éditer le message une fois posté....
Donc la syntaxe correcte est :
struct MyStruct{...}
MyStruct**ppArray=(MyStruct**)malloc(nElements*sizeof(MyStruct*)); // tableau de pointeurs
pour initialiser un élément i :
ppArray[i]=(MyStruct*)malloc(sizeof(MyStruct));
samedi 30 décembre 2006 à 17:08:03 | Re : problème de pointeur

Kurpeus1

Membre Club

hmm je vais tester ca. Est ce que le fait que ma structure soit composé de pointeurs vers des chaines pose problème ?

samedi 30 décembre 2006 à 18:26:31 | Re : problème de pointeur

Kurpeus1

Membre Club
Apparement mes pointeurs sont toujours nuls. Je suis un peu (pour ne pas dire completement perdu dans l'écriture).

Voici mon code :

        char * buffer = malloc(sizeof(*buffer)*256);
   
    char * fichTxt;
    char * fichCsv;

    char * pBuffer;
    char resultString[10];
    char * end;
   

    int resultInt = 0;
    int i = 0;
    int ind = 0;
    int valueTemp = 0;
    int valueData = 0;


    struct global ** pTable = (struct global **) malloc(4096*sizeof(struct global*));
   
    // chemin des fichiers
    struct param *pLoad;   
    pLoad = setting();
    fichTxt = pLoad->temp;
    fichCsv = pLoad->csv;
   



    for (i=0;i<4096; i++)
    {
        pTable[i] = (struct global *) malloc(sizeof(struct global));
        initStruct(pTable[i]);
    }

    i = 0;

     if( (text = fopen( fichTxt, "r")) == NULL) return (-1);
     if( (excel = fopen( fichCsv, "w")) == NULL) return (-2);
     
    temp = fopen("c:\\toto.txt", "w");
    fprintf(temp, "Zone 1; Zone 2; Zone 3; Codebar; Article; Prix Vente;\n");
    while ((fgets(buffer, 255, text)!= NULL))
    {
        pBuffer = buffer ;
       
        pTable[ind] = splitTxt( pBuffer, ';'); // ici les valeurs dans pTable[ind] existent bien, la fonction splitTxt fonctionne donc bien
        ind ++;
    }
    for (i = 0; i<ind; i++)
    {
        if ( !strcmp(pTable[i]->typeAction, "AJ Ref")) // le test n'est jamais vérifier quand je place cette condition en dehors du while
            fprintf(temp, "%s;%s;%s;%s;%s;%s\n", pTable[i]->champ3, pTable[i]->champ4, pTable[i]->champ5,
            pTable[i]->codebar,pTable[i]->champ1, pTable[i]->champ2);
    }


    fclose(text);
    fclose(excel);
    fclose(temp);
    return 1;

il semble que mes pointeurs soient vides. je pourrais faire le printf directement après le splitTxt mais dans une seconde fonction je ne pourrais pas le faire. Je dois donc créer un tableau de pointeurs que je garde pendant un certain temps.

voici ce que renvoie la fonction splitTxt  :


struct global *splitTxt( char * str, char c)
{
     int ind = 0 ;

     char *data = str;
     struct global *pData ;
     pData = malloc(sizeof(struct global));

     (.......) traitement sur les data du buffers. Allocation du genre  pData->typeAction = data;
                        
     return pData ;
}

merci
samedi 30 décembre 2006 à 20:33:27 | Re : problème de pointeur

JCDjcd

struct global (* pTable)[4096] ;
ca marche pas ?!?


Pourquoi faire simple quand on peut faire compliqué ?
dimanche 31 décembre 2006 à 10:47:16 | Re : problème de pointeur

Kurpeus1

Membre Club
Quand j'utilise struct global (* pTable)[4096] ; et que j'essaye par la suite de lui donner l'adresse d'un pointeur en faisant  pTable[i] = split(pBuffer, ';'); (split me retourne un pointeur), il me dit que l'opérand de gauche doit être une L-value

1 2

Cette discussion est classée dans : fonction, char, pointeur, global, struct


Répondre à ce message

Sujets en rapport avec ce message

une question [ par deck_bsd ] Bonsoir tous le monde, Voila une question me trote dans la tête depuis quelque temps. Et notament qu'en j'ai vu la signature de la fonction strdup : Pointeur sur char [ par wislam2007 ] salut j'ai un variable de type char, et une fonction qui retourne un pointeur sur un caractère (char), comment faire pour affecter le retour de la fon pointeur à la fin "\0" [ par avg ] j'ai une fonction qui demande un pointeur sur unsigned char mais il faut qu'il contient à la fin "\0" comment je peut faire [code=cpp] unsigned char pointeur d'un pointeur [ par dud1410 ] salut tout le monde, j'ai le format suivant: struct a {    //declaration necessaire } struct b {     a *c; }j'ai besoin d'un pointeu la fonction atoi [ par fiorellafatma ] [^^pirate]salut à tous j'ai fait cette instruction mais cela a affiché un message d'erreur pourquoi j=atoi(*chr)-'a' il m'a dit que atoi ne peut pas c Convert char** en int sous c [ par clavz40 ] Bonjour a tous, Je développe une petite application en c pour appareil de lecture de code barre dont je récupère les infos. J'avais besoin d'une fon


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,998 sec (3)

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