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 :

Problème de passage de paramètre par adresse


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut Problème de passage de paramètre par adresse
    Bonjour,

    voila j'ai la fonction suivante :
    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
     
    char *bufferDest;
     
    LONG FAR PASCAL SamplesDialog (HWND hWnd,WORD wMsg,WORD wParam,LONG lParam)
    {
         .......
         bufferDest = malloc(2000*sizeof(char));   
         pfn_X_LEC_ART_CLE_DTA(&bufferDest);  //appel de la fonction de la dll 
         .....
         SetDlgItemText(hWnd,IDC_MSG,bufferDest); //affichage
         .....
    }
     
    // fonction de la dll appelée
    extern "C" int WINAPI X_LEC_ART_CLE_DTA(LPSTR *dest)
    {
         ......
         **dest='z';
         .......
    }
    Et l'affichage me renvoi : h€4
    S'agit -il de l'adresse du pointeur ou alors du contenu vers lequel il pointe mais qui a été converti...??
    Que dois-je faire pour afficher le contenu à savoir : z
    J'ai essayé toutes les possibilités mais je ne vois pas.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pfn_X_LEC_ART_CLE_DTA(&bufferDest);
    Quel est le prototype de cette fonction parce que je penserais que ce serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void pfn_X_LEC_ART_CLE_DTA(char *s);
    Donc l'appel devrait plutôt être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pfn_X_LEC_ART_CLE_DTA(bufferDest);
    Jc

  3. #3
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcpy(dest, "z");
    avec un tableau de 2000 - 1 caracteres, on ne risque pas le depassement...

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    Ben le prototype est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern "C" int WINAPI X_LEC_ART_CLE_DTA(LPSTR *dest)
    j'ai essayé de l'appeller ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pfn_X_LEC_ART_CLE_DTA(bufferDest);
    affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetDlgItemText(hWnd,IDC_MSG,bufferDest);
    mais le resultat produit est le même...

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    J'ai essayé avec strcpy(), mais le resultat est le même : h€4
    Si c'est l'adresse c'est normal que ce soit tjs la même...?

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Hmm, cela doit etre une windowserie qui cache le pointeur dans le type LPSTR. A voir dans le forum Developpement Windows.

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    comment ça je comprend pas trop...??
    Le pointeur disparait...??

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    1°) Le prototype de ta procédure de fenêtre / boîte de dialogue est très mauvais. On dirait un reliquat des prototypes de Win16...
    Pour une fenêtre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* LRESULT = LONG_PTR : pas de différence en mode 32 bits */
    LRESULT CALLBACK SamplesDialog ( 
     HWND hWnd,
     UINT wMsg, /* wMsg est un entier 32bits. Mais pas vraiment de différence non plus */
     WPARAM wParam, /* WPARAM = UINT_PTR : Là, tu perdais le mot supérieur! */
     LPARAM lParam /* LPARAM = LONG_PTR : pas de différence en mode 32 bits */
     );
    L'erreur la plus importante était celle de wParam : Si on traite des messages de certains contrôles (WM_COMMAND), on doit utiliser HIWORD(wParam), qui aurait foiré...

    Et pour une boîte de dialogue, il faut remplacer le LRESULT par un INT_PTR (anciennement un BOOL)

    ---> Avantage: Notmalement, tu n'auras plus à caster ta fonction en WNDPROC ou en DLGPROC: ça devrait rentrer tout seul sans cast...


    2°) Tu peux montrer exactement tout le code de X_LEC_ART_CLE_DTA() qui interagit avec dest ?
    Et montrer comment tu l'appelles maintenant (si tu as modifié entretemps) ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par cout
    comment ça je comprend pas trop...??
    Le pointeur disparait...??
    Non, il est peut-etre cache dans le typedef, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typedef char * LPSTR;
    Du coup un
    deviendrait
    ce qui n'est pas l'effet souhaite. Mais je n'en sais rien. La programmation Windows, je ne connais pas.

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    ben ça, c'est le cas, et ça l'a toujours été.
    La convention est simple : La règle, c'est que ce qui commence par P ou LP est un typedef de pointeur (Evidemment, il peut y avoir des exceptions, comme le type POSITION...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    Voici le code complet :
    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
     
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <fstream.h>
     
    BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call,
    LPVOID lpReserved)
    {
    	switch (ul_reason_for_call)
    	{
    		case DLL_PROCESS_ATTACH:
    		case DLL_THREAD_ATTACH:
    		case DLL_THREAD_DETACH:
    		case DLL_PROCESS_DETACH:
    			break;
    	}
    	return true;
    }
     
    extern "C" int WINAPI X_LEC_ART_CLE_DTA(WORD lgCle,WORD cdeFicInd,LPSTR cleRech,WORD adNumEnreg,LPSTR src,LPSTR dest)
    {
     
       *dest='z';
     
       return 0;
    }

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    #include <windows.h>
    #include <windowsx.h>
    #include <stdio.h>
    #include "vbdialog.h"
    #pragma hdrstop
     
     
    static HINSTANCE hInst;
     
    char *code_fichier,*code_index,*lgcle;
    char cle_rech[20]; 
    char *bufferDest;
    WORD *code_fich_ind;
     
     
     
    //déclaration des fonctions de la DLL
    typedef int (WINAPI *DLL_Function_X_LEC_ART_CLE_DTA) (WORD lgCle,WORD cdeFicInd,LPSTR cleRech,WORD adNumEnreg,LPSTR src,LPSTR dest);
    DLL_Function_X_LEC_ART_CLE_DTA pfn_X_LEC_ART_CLE_DTA; 
     
     
    LONG FAR PASCAL SamplesDialog (HWND hWnd,WORD wMsg,WORD wParam,LONG lParam)
    {
     
      //chargement de la dll
      HMODULE hDLL = LoadLibrary("TestDLL.dll");
      pfn_X_LEC_ART_CLE_DTA = (DLL_Function_X_LEC_ART_CLE_DTA)   GetProcAddress(hDLL,"X_LEC_ART_CLE_DTA");
     
      // process the message
      switch( wMsg )
      {
        // process command from one of the child controls
        case WM_COMMAND:
          switch( GET_WM_COMMAND_ID(wParam,lParam) )
          {
               // ok or cancel, so end the dialog
               case IDOK:
             	    code_fichier = malloc(sizeof(char));
    	    code_index = malloc(sizeof(char));
                     lgcle = malloc(sizeof(char));
                     code_fich_ind = malloc(2*sizeof(char));
             	    bufferDest = malloc(20*sizeof(char));
     
                     GetDlgItemText(hWnd,IDC_CODEFICHIER,code_fichier,2);
    	    GetDlgItemText(hWnd,IDC_CODEINDEX,code_index,2);
                     GetDlgItemText(hWnd,IDC_LGCLE,lgcle,2);
                     GetDlgItemText(hWnd,IDC_CLERECH,cle_rech,20);             
     
                    code_fich_ind = strcat(code_fichier,code_index);
     
     
             	   pfn_X_LEC_ART_CLE_DTA(*lgcle,*code_fich_ind,cle_rech,5,"C.HEA",&bufferDest);
                   SetDlgItemText(hWnd,IDC_MSG,bufferDest);
                   MessageBox( NULL,bufferDest , NULL, MB_OK | MB_APPLMODAL );
                   break;
     
              case IDCANCEL:
    	  EndDialog(hWnd, 0 );
    	  break;
          }
          break;
     
        // initialize the dialog
        case WM_INITDIALOG:
        	return FALSE;
      }
      FreeLibrary(hDLL);
      return FALSE;
    }
     
    // Turn off warning: Parameter * is never used in function WinMain...
    #pragma argsused
     
    int PASCAL WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdLine,int nCmdShow)
    {
      // save the instance
      hInst = hInstance;
     
      // load the samples dialog box
      if( DialogBox( hInstance, "Samples", NULL, (FARPROC)SamplesDialog ) == -1 )
        MessageBox( NULL, "Can't load dialog box!\n", NULL, MB_OK | MB_APPLMODAL );
     
      // end of program 
      return 0;
    }

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    1°) Et ça compile ?

    Ta fonction de DLL demande un LPSTR (char *), et tu lui passe l'adresse d'un char * (tu lui passes &bufferDest, ce qui équivaut à un char ** : Tu devrais au moins avoir un warning...)
    Quel est ton compilateur, et quelles sont des options de compilation?

    2°) À moins que la chaîne soit déjà à l'origine une chaîne valide d'un caractère au moins, tu ne dois pas modifier seulement le premier caractère.
    Essaie plutôt un strncpy() (ou strncpy_s() si ton compilo gueule) comme on te l'a conseillé plus haut...

    3°) Une fois le bon prototype mis pour ta fonction de boîte de dialogue, tu devrais pouvoir supprimer le transtypage (FARPROC)...

    N°) À propos des types de Windows:
    http://msdn.microsoft.com/library/de...data_types.asp
    Regarde aussi ici et pour les bons prototypes de fonctions WinMain() et boite de dialogue.
    (Note : Généralement, on déclare WinMain() en tant que int WINAPI WinMain( blablabla)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    Tu avais raison concernant le "&bufferDest", le compilateur m'indique un warning : "Suspicious pointer conversion". Du coup je l'ai remplacé par "bufferDest" dans l'appel de la fonction. Mais le resultat est toujours le même : "H€4"...

    J'ai essayé aussi avec strncpy(), mais aucun changement non plus...

    Autre chose, j'aimerais bien que la zone mémoire que j'alloue pour "bufferDest" soit allouée dans le code de la fonction de la DLL. j'ai donc supprimer la ligne suivante du code de la fonction appelante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bufferDest = malloc(20*sizeof(char));
    et j'ai rajouté la ligne suivante dans le code de la fonction de la DLL appelée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dest = (char*) malloc(20*sizeof(char));
    Et la il ne m'affiche plus rien, même pas "H€4", du coup le problème ne viendrait-il pas de l'allocation de mémoire...??

  14. #14
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Réglons déjà un problème qui ne changera rien au problème mais faut le faire remarquer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dest = (char*) malloc(20*sizeof(char));
    * On ne cast pas le retour de malloc en C
    * sizeof(char) == 1 donc est inutile

    Jc

  15. #15
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    Pour le "sizeof(char)", c'est vrai que c'est inutile.
    Mais je suis obliger de caster le retour du malloc sinon le compilateur m'indique l'erreur suivante :
    Cannot convert 'void *' to 'char *'
    Cela vient du fait que la variable "dest" est un parametre de la fonction de type LPSTR, je pense. J'ai également remplacer le malloc par calloc, pour que le contenu soit initialisé, je sais pas si ça change grand chose dans mon cas, mais bon...Et j'ai rajouter des "free()" car je les avait oubliés !!!

  16. #16
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par cout
    Cannot convert 'void *' to 'char *'
    Tu compiles en C++ - assure toi que l'extension de ton fichier source est .c. Ceci dit, le C++ est le langage naturel de l'API Windows. Au risque de me repeter, le bon forum est Developpement Windows.

  17. #17
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    Je me suis aperçu qu'avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    char *code_fichier,*code_index,*code_fich_ind;
     
    code_fichier = malloc(1);
    code_index = malloc(1);
    code_fich_ind = malloc(2);
     
    GetDlgItemText(hWnd,IDC_CODEFICHIER,code_fichier,2);
    GetDlgItemText(hWnd,IDC_CODEINDEX,code_index,2);
    GetDlgItemText(hWnd,IDC_CLERECH,cle_rech,20);             
     
    *code_fich_ind = *code_fichier;
    strcat(code_fich_ind,code_index);
    l'affichage de "code_fich_ind" me renvoi la concaténation de "code_index" et "code_fichier" mais de façon un peu particuliere (avec par ex code_fichier = 'a' et code_index = 'z') : "a€4z" Et lorsque j'utilise des calloc à la place des malloc j'obtient : "az" soit le resultat recherché...
    D'où vient ce "€4"...??

  18. #18
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    C'est vrai que je devrais mieux poster dans le forum developpement windows, mais en fait j'utilise l'api windows uniquement pour créer une petite fenetre qui permettra de tester les fonctions de ma DLL, je dois surtout réaliser une dll en C.

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    code_fichier = malloc(1);
    code_index = malloc(1);
    code_fich_ind = malloc(2);
     
    GetDlgItemText(hWnd,IDC_CODEFICHIER,code_fichier,2);
    GetDlgItemText(hWnd,IDC_CODEINDEX,code_index,2);
    GetDlgItemText(hWnd,IDC_CLERECH,cle_rech,20);
    Tu ne crois pas qu'il y a déjà un léger problème, là ?

    PS: quel est ton compilo?
    PPS: Essaie en utilisant calloc() au lieu de malloc(), pour être sûr que le contenu de tes buffers est bien initialisé à zéro...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    J'utilise les "calloc" et effectivement ça marche.

    J'aimerais que la zone alloué au pointeur "dest" se fasse dans la fonction que j'appelle, mais ça ne fonctionne que si j'alloue cette mémoire avant l'appel de la fonction. Sinon l'ecriture dans cette zone fonctionne.

    Mon compilo est borland c++ 5.01 (c'est le logiciel que j'utilise, est-ce le compilo...?)

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/01/2009, 23h46
  2. [c] passage de paramètres par adresse
    Par Ashin dans le forum C
    Réponses: 11
    Dernier message: 25/03/2008, 17h36
  3. Réponses: 3
    Dernier message: 29/06/2007, 17h18
  4. Passage de paramètres par adresse
    Par Irish dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/02/2007, 17h39
  5. Passage de paramètre par adresse, pointeur
    Par spileo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/01/2007, 19h00

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