sto facendo questa prova, che ne pensate:
è giusto assegnare ad variabile globale un char* di ritorno da una funzione (ossia ritorna un char* allocato con GlobalAlloc ed inizializzato leggendo la edit) e deallocarla al termine con GlobalFree???
sintetisso esemplificando:
premesso che i file1,file2,file3 sono in ordine di esecuzione/chiamata e che la lettura dei valori negli edit può avvenire
in ripetizione
file1.cpp
codice:char *testo; //variabile globale ... ...
file2.cpp
codice:extern char *testo; ... ... WM_COMMAND: testo=GetValue(hwnd,idctrl);
file3.cpp
codice:extern char *testo; ... ... WM_INITDIALOG: //operazioni con testo ... ... GlobalFree(testo);
file4.cpp // contiene la funzione richiamabile + volte
dubbi:codice:... ... char *GetValue(HWND hwnd, int IDCtrl) { char* bufTxt=NULL; int lStr=GetWindowTextLength(GetDlgItem(hwnd,IDCtrl)); if (lStr>0) { bufTxt = (char*)GlobalAlloc(GPTR,lStr+1); GetDlgItemText(hwnd,IDCtrl,bufTxt,lStr+1); } return bufTxt; } ... ...
1) la funzione ritorna un char*, un punatore ad una stringa definto locale ma allocato nella heap quindi sopravvive
2) deallocare memoria in questo modo è corretto
da debug sembra tutto funzionare

Rispondi quotando