begin process at 2012 05 29 13:46:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

pointeur structure & héritage


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

pointeur structure & héritage

mardi 26 décembre 2006 à 15:35:01 | pointeur structure & héritage

Kurpeus1

Membre Club
Bonjour et joyeuses fêtes a tous ^^

J'ai un problème. J'ai une fonction qui vient lire des paramètres dans un fichier de configuration. Celle ci vient remplir une structure dont je revoie le pointeur. Voici le code

struct param
{
    int success ;
    char * temp;
    char * csv;
    char * dir;
    int com;
    int baudrate ;
};

struct param *setting()
{
    FILE * access ;
    FILE * test;
   
    char * settings = "C:\\Documents and Settings\\Kurpeus\\Bureau\\Visual Projects\\settings.ini";

    char * data = malloc(sizeof(data)*255);
    char * temp = malloc(sizeof(temp)*255);
    char * csv = malloc(sizeof(csv)*255);
    char * dir = malloc(sizeof(dir)*255);
    char * com = malloc(sizeof(com)*8);
    char * baudrate = malloc(sizeof(baudrate)*16);

    char*  end ;

    long n;

    struct param load ;
    struct param *pLoad ;
    pLoad = &load;

    // Lecture des paramètres de configuration :
              
    if((access = fopen( settings, "r")) == NULL)
    {
        // Le fichier n'existe pas
        pLoad->success = 0;
        return pLoad;
        }
    else
    {  
        // Fichier de conf trouvé
        pLoad->success = 1;

        // Lecture du fichier de configuration
        GetPrivateProfileString("files","temp", "", temp, 255, settings );
        GetPrivateProfileString("files","csv", "", csv, 255, settings );
        GetPrivateProfileString("files","dir", "", dir, 255, settings );
        GetPrivateProfileString("files","com", "", com, 8, settings );
        GetPrivateProfileString("files","baudrate", "", baudrate, 16, settings );

        // On initialise les variables pour les passer à la fênetre paramètre
        pLoad->temp = temp;
        pLoad->csv = csv;
        pLoad->dir = dir;

        // Conversion d'une chaine en un entier
        n = strtol(baudrate, &end, 10);
        pLoad->baudrate = n;

        n = strtol(com, &end, 10);
        pLoad->com = n;

        fclose(access);
        return pLoad;
        }
}

J'ai testé les valeurs pLoad->temp ect, elles sont bien initialisées. Maintenant voici la fonction appellante :

struct param
{
    int success ;
    char * temp;
    char * csv;
    char * dir;
    int com;
    int baudrate ;
};


int on_properties_activate(GtkMenuItem * menuitem,
                            gpointer user_data)
{
    GtkWidget *paramWindow;
    GtkWidget *entry1 ;
    GtkWidget *entry2 ;
    GtkWidget *entry3 ;

    FILE * test;

    struct param *pInitParam;

    paramWindow = create_paramWindow();

    pInitParam = setting();

    entry1 = lookup_widget(paramWindow, "entry1");

        test = fopen("c:\\test.txt", "w");
        fprintf(test, "%s", pInitParam->csv);
        fclose(test);
}

Ces deux fonctions sont dans des fichiers différents.  Lors de la compilation, je n'ai aucune erreur. Cependant quand je lance le programme
j'obtient un message d'erreur handle exception ....access violation

Je ne vois pas trop d'ou ca vient

Dans la fonction appellante, je teste juste la valeur retourné en l'inscrivant dans un fichier ( je developpe une appli sous glade, et j'ai pas de console pour visualiser les erreurs)
(la partie glade n'est pas interressante et n'intervient pas dans l'erreur)

Merci d'avance
mardi 26 décembre 2006 à 15:46:50 | Re : pointeur structure & héritage

MadMax1024

Membre Club
A premiere vue ton code est assé complexe et je ne sui pas un pro.
Ton erreur est assé courante dans ce type d'application elle vient du fait du manque
d'allocation mémoire.
A un certun moment de ton code un pointeur ne trouve
aucun bloc mémoire pour pointer.
Désolé pour ne pas te dire où se trouve le pointeur(s) défaillant(s).
mardi 26 décembre 2006 à 15:47:47 | Re : pointeur structure & héritage

MadMax1024

Membre Club
Joyeuse fête à toi aussi
mardi 26 décembre 2006 à 15:54:15 | Re : pointeur structure & héritage

Kurpeus1

Membre Club
A priori mon problème se trouve sur le pointeur suivant : pInitParam

test = fopen("c:\\test.txt", "w");
        fprintf(test, "%s", pInitParam->csv);
        fclose(test);

dans la fonction appellé :

je crée ma structure et un pointeur que renvoie la fonction :

    struct param load ;
    struct param *pLoad ;
    pLoad = &load;


je l'initialise

(...)

et je retourne le pointeur :
return pLoad;

dans la fonction appellé :
je crée un pointeur vers une structure 

    struct param *pInitParam;

J'attribue le pointeur retourné à mon pointeur courant
    pInitParam = setting();

et je teste sa valeur :
pInitParam->csv


voila, je fais mal un truc a ce niveau mais je vois pas trop. Peut etre que c'est plus clair comme ca
mardi 26 décembre 2006 à 15:55:42 | Re : pointeur structure & héritage

Kurpeus1

Membre Club
hmm la deuxième fonction est bien sur la fonction appellante, désolé pour l'erreur
mardi 26 décembre 2006 à 16:01:05 | Re : pointeur structure & héritage

MadMax1024

Membre Club
Tu dis que tu programme sous glad je ne connais pas cet outil mais
est ce que tu peus mettre en commentaire certaines lignes de ton programme.
Si oui je te propose de mettre en commantaire les lignes de code qui sont appelées jusqua remonter à la soucres de ton problème.
Mais je pense que tu la déja fait!!

mardi 26 décembre 2006 à 16:09:11 | Re : pointeur structure & héritage

Kurpeus1

Membre Club

Oui effectivement. Si je commente l'accès au contenu du pointeur fprintf(test, "%s", pInitParam->csv), le  programme ne plante pas.

Je me pose la question de comment donner à un pointeur l'adresse mémoire  d'un pointeur renvoyé par une fonction

par exemple pour affecter à un pointeur l'adresse d'un autre on fait :

pointeur1 = &pointeur2

maitenant quand on passe par une fonction
pointeur1 = &( fonction() );  // avec return pointeur2

ca ca ne marche pas ...

Donc la question est : est ce que la fonction donne bien l'adresse du pointeur2 à pointeur1 quand on fait
pointeur1 = fonction() ;

Est ce alors un problème d'héritage ?

Autrement, Glade n'est qu'on outil pour généré du code gtk pour faire une interface graphique.

mardi 26 décembre 2006 à 16:22:28 | Re : pointeur structure & héritage

MadMax1024

Membre Club
Normalemnt la fonction te renoi l'adresse du pointeur.
je ne pense pas que sa soit un probleme d'héritage
car chaque pointeurs à une adresse mémoire unique si ils sont allouées correctement.
Su tu teste seulement la valeur renvoyé par pInitParam->csv sans faire de fprintfque ce passe t-il ?
Dans tt les cas ton probleme est donc dans la fonction setting()

mardi 26 décembre 2006 à 16:25:00 | Re : pointeur structure & héritage

MadMax1024

Membre Club
Désolé pour les fautes d'orthographes j'essaye de te répondre le plus rapidement possible
mardi 26 décembre 2006 à 16:31:38 | Re : pointeur structure & héritage

clempar55

Réponse acceptée !
Je pense avoir trouvé l'erreur. Elle se situe dans la fonction apellée:
struct param load ;
struct param *pLoad ;
pLoad = &load;
En fait ce n'est pas ce code qui est défaillant, c'est plutôt le fait que ta fonction retourne
pLoad.
En effet,
load est un objet créé statiquement, ce qui signifie qu'il sera détruit à la sortie de la fonction dans laquelle il a été créé, ici setting(). Donc ensuite, dans la fonction apelante, pInitParam pointera vers une zone memoire qui a été libérée: il va donc y avoir une erreur.
je suggererai donc de remplacer
struct param load ;
struct param *pLoad ;
pLoad = &load;
par
struct param *pLoad ;
pLoad = malloc(sizeof(
struct param));
Ainsi pLoad pointera vers une zone memoire créé dynamiquement, et qui ne sera donc pas detruite è la fin de
setting(). Le revers de la médaille est qu'il faudra libérer manuellement la memoire après utilisation de la variable par
free(pLoad );


En esperant avoir résolu ce problème, je vous souhaite de
Bonnes fêtes
de fin d'année !


1 2

Cette discussion est classée dans : temp, char, csv, settings, pload


Répondre à ce message

Sujets en rapport avec ce message

Probleme GTK [ par Jo ] Salut,Quelqu'un pourrait me dire ou est l'erreur ?char * fichier; char *z;gchar *temp;temp = gtk_entry_get_text(GTK_ENTRY(Data));fd1= fopen((char *)te problème de pointeur sur char (SUPER HYPER IMPORTANT -> juste pour moi...je supose) [ par levraipig ] bonjour à tous, voila moi j'ai un p'ti problème plutot embêtant.... je dois créer un class qui gère les chaines de caractères (ne me demander pas pou problème de pointeur sur char (SUPER HYPER IMPORTANT -> juste pour moi...je supose) [ par levraipig ] bonjour à tous, voila moi j'ai un p'ti problème plutot embêtant.... je dois créer un class qui gère les chaines de caractères (ne me demander pas pou concaténation........... [ par moloko2000 ] Lorsque je concatène une chaine de caractère avec strcat par exemple: strcat(retour_search,temp );retour_search à la valeur suivante:???????????????? renvoi de type char[] d'une fonction [ par sbouli ] Bonjour,Je suis ULTRA débutant et je cherche à faire une fonction renvoyant du char, voila le principe :char lectureIni (char section[], char clef[], Exportation de données [ par Niníel ] Hello.J'ai un p'tit souci pour exporter mes données vers un fichier CSV. Je m'explique: Premièrement, j'ai une structure:struct TFilm{ char chTitre Exportation de données [ par Niníel ] Hello.J'ai un p'tit souci pour exporter mes données vers un fichier CSV. Je m'explique: Premièrement, j'ai une structure:struct TFilm{char chTitre[25] #def [ par xarier ] salut tous fje voudrait savoir un trucs sur les #defest ce que je peut faire un #def pour une fonction ex : un #def pour cachar* Replace( char* Chain Probleme de fonction gettok() pour un bot IRC [ par Tidam ] Voilou je m'explique, je suis en train de coder un bot IRC mais j'ai un ptit probleme. J'ai cree ma propre fonction gettok (d'ou vient surement le pro conversion [ par anubis52100 ] je souhaiterai conaitre le code pour convertir un CString en Char*voila se que j'ai fait mais jarive pas a convertir strNom en char*j'y arive mais qua


Nos sponsors


Sondage...

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,686 sec (4)

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