Salve, vorrei chiedere a qualcuno se riesce a capire cosa non va in questa porzione di codice:
quando vado a compilare e a aprire la dialog di questa funzione, il suo lavoro lo fà (anche se un pò male... dovrebbe andare a capo con \n ma mi scrive solo una sbarretta nera...), ma quando vado a chiudere il programma (! non la dialog !) win mi dice "l'istruzione 0x769520ba ha fatto riferimento alla memoria 0x0a43343d. La memoria non poteva essere read"codice:BOOL CALLBACK TabellaDlgProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { int i,lunghezza_testo; char riga[6],*testo; if((testo=(char*)malloc(sizeof(char)))==0) { MessageBox(hwnd,"Memoria insufficiente per eseguire l'operazione","Errore",MB_ICONERROR|MB_OK); return TRUE; } switch(msg) { case WM_INITDIALOG: for(i=0;i<=0XFF;i++) { sprintf(riga,"%c=%2X\n",tab[i],i); if(realloc(testo,sizeof(char)*(strlen(riga)+1))==0) { MessageBox(hwnd,"Memoria insufficiente per eseguire l'operazione","Errore",MB_ICONERROR|MB_OK); break; } strcat(testo,riga); } printf(testo); if((SetDlgItemText(hwnd,IDC_TABELLA,testo))==0) { MessageBox(hwnd,"Errore nell'output dei dati","Errore!",MB_ICONERROR|MB_OK); break; } break;
il problema deve per forza essere nella parte di codice che è processata nel case WM_INITDIALOG, perchè se la elimino e ricompilo il tutto (fà parte di un progetto, quindi ho un sacco di altre funzioni...) l'errore non me lo dà più.
Credo che il problema sia nella gestione della memoria... non uso spesso malloc e simili (anche se servono un casino) e quindi può darsi che ho fatto qualche errore nella gestione dei puntatori... ma non riesco proprio a capire cos'è che ho combinato.
Se dovessero servire, ho caricato gli altri files del progetto su internet:
Files crypter_win
tenete presente che ho scritto tutto con Dev-Cpp 4.9.8.0

Rispondi quotando
non ho proprio idea di che fare...
