Bonjour,
Je me posais la question de savoir si ce code est valide dans le cas d'une application en C win32 avec Interface graphique :
Parce que étant donné que p est alloué par malloc cet espace ne sera pas libéré sans un free (règle de base en C ^^). Mais dans ce cas, si on cherche à afficher le text d'une chaine de caractère allouée dynamiquement. Le second paramètre de SetWindowText est un pointeur de chaine de chaîne de caracètre (LPTSTR). Donc on passe l'adresse de notre buffer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 char * p; p = (char*) malloc (10+1); strcpy(p,"test"); SetWindowText(hWnd,p); free(p);
Ma question est , est ce que ce code est valide ? car dans l'absolu cela fonctionne, mais il se peut très bien que l'espace de p soit ré-écrit et donc du coup le texte affiché dans le contrôle ne serait plus le bon. Du coup je pense que cette méthode de faire est pas très safe, si ?
Le mieux ne serait-il pas de :
- Si le text ne doit pas être récupéré , ne pas faire de free et l'espace sera donc libéré à la fin du programme.
- Si le text doit être récupéré , faire le free lorsque l'on récupère le pointeur via GetWindowText.
Est-ce que j'ai juste ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 p = (char*) malloc (10+1); strcpy(p,"test"); SetWindowText(hWnd,p); ...... Quelque pars dans le programme char * b; GetWindowText(hWnd,b,10+1); free(b);
Ou alors la fonction SetWindowText derrière fais une copie de notre chaine de caractère et on peut donc en toute sécurité faire un free de notre pointeur ?
PS : Le code est écris à la vas vite, je ne sais pas si il compile, mais la question ne porte pas sur la synthaxe de celui-ci
Partager