Allora ho individuato il punto in cui il programma genera l'eccezione, ma di fatto non ho capito perchè la genera. E' in corrispondenza della chiamata ad una funzione all'interno di un'altra funzione. Solo che mi sembra tutto ok. In ogni caso, perchè mi dà problemi solo quando non eseguo il debug? Non esiste qualche comando per liberare la memoria all'uscita del programma stesso? Ti allego in basso il codice della funzione incriminata, tieni presente che utilizzo delle chiamate a DLL esterne.
codice:double* CSRDlg::Classify(void) { const int numWeights=12; //Parser per recupero input per il classificatore char genericRow[3000]; FILE* FileIn; fopen_s(&FileIn,"C:\\Documents and Settings\\ruggierd\\Desktop\\NN\\Esercizi\\Esperimenti\\Speech recognition\\Speech recognizer\\DLL\\Features extractor\\FEWeights.nsw","r"); if(FileIn == NULL) { MessageBox("Errore nel leggere il file di input per il classificatore!\n"); exit(1); } int counterRow=0; int cardFullSynapse; const int cardWeights=12; double *weightsDouble = new double[cardWeights]; const int numOutClassifier=2; double *outputData=new double[numOutClassifier]; //Lettura righe while(counterRow < 12) { counterRow+=1; fgets(genericRow,3000,FileIn); } fscanf_s( FileIn, "%d\n", &cardFullSynapse); for (int k = 0; k < cardWeights; k++) { fscanf_s( FileIn, "%lf\n", &weightsDouble[k]); } //Parser per recupero pesi fclose(FileIn); enum {NSRecallNetwork, NSLearningNetwork}; HINSTANCE hDLL = LoadDLLFunctions("C:\\Documents and Settings\\ruggierd\\Desktop\\NN\\Esercizi\\Esperimenti\\Speech recognition\\Speech recognizer\\DLL\\classifier\\CLASSIFICATORE1WITHSOFTMAX.dll"); if (hDLL) { void *nnClassificatore; int CreateNet=createNetwork(nnClassificatore, NSLearningNetwork); if (!CreateNet) loadWeights(nnClassificatore, "C:\\Documents and Settings\\ruggierd\\Desktop\\NN\\Esercizi\\Esperimenti\\Speech recognition\\Speech recognizer\\DLL\\classifier\\Classificatore1withSoftmax.nsw"); // Avvio classificatore int classifierResponse=getResponse(nnClassificatore, numWeights, weightsDouble, outputData); // Questa è la chiamata che genera l'eccezione!!!!!!!! /*if (classifierResponse) { printf ("\nClassifier Network response error\n"); exit(1); }*/ delete weightsDouble; destroyNetwork(nnClassificatore); FreeLibrary(hDLL); return outputData; } else MessageBox("\nERROR LOADING DLL Classificatore"); return 0; }

Rispondi quotando