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;
}