Quando eseguo questo programma funziona correttamente(almeno per quanto io sappia), ma alla
seconda volta che vado su "case 1" o "case 2" durante la stessa sessione crasha con errore
(0x)C0000005 -> -1073741819
dopo l'istruzione
"printf("\n\n CIAO SONO UN BUG!!!\n\n");"
Questo non si verifica se vado più volte sugli altri "case".
Non ho idea di dove sia l'errore... aiuto!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#include <tchar.h>
int displayMenu();
int openFile(char *pathName);
int cToM(int row, int col, int maxCol);
int aggiornaMatrice(int *matrice,int *righe,int *colonne,const char *fileName);
int main(int args,char **argv)
{
int scelta;
int *matrice1;
int *matrice2;
int righeMatrice1;
int colonneMatrice1;
int righeMatrice2;
int colonneMatrice2;
while(1){
scelta=displayMenu();
printf("\n scelta: %d", scelta);
system("pause");
switch(scelta){
case 1:
openFile(_tcsdup(TEXT("notepad.exe matrice1.txt")));
aggiornaMatrice(matrice1,&righeMatrice1,&colonneMatrice1,"matrice1.txt");
break;
case 2:
openFile(_tcsdup(TEXT("notepad.exe matrice2.txt")));
aggiornaMatrice(matrice2,&righeMatrice2,&colonneMatrice2,"matrice2.txt");
break;
case 3:
printf("\n\n prodotto: ");
break;
// ...
default:
printf("\n\n [ERROR] cmd not defined [/ERROR]\n\n");
break;
}
system("pause");
system("cls");
}
}
int cToM(int row, int col, int maxCol)
{
return (row*maxCol)+col;
}
int displayMenu()
{
int scelta;
printf("\n Cosa vuoi fare?\n");
printf("\n\t1-Modifica matrice 1");
printf("\n\t2-Modifica matrice 2");
printf("\n");
printf("\n\t3-Calcola prodotto");
printf("\n\t4-Calcola derivata");
scanf("%d", &scelta);
return scelta;
}
int openFile(LPTSTR pathName){
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if( !CreateProcess( NULL,
pathName,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi )
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return -1;
}
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
return 0;
}
int DEBUG_stampaMatrice(int *matrice,int x,int y){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
printf("%d\t", matrice[cToM(i,j,y)]);
}
printf("\n");
}
return 0;
}
int aggiornaMatrice(int *matrice,int *righe,int *colonne,const char *fileName)
{
FILE *f=fopen(fileName,"r");
int indice=0;
char c;
fscanf(f,"%d\t%d\n*\n", righe,colonne);
matrice=(int*)realloc(matrice,(*righe)*(*colonne));
for(int i=0;i<(*righe);i++){
for(int j=0;j<(*colonne);j++){
fscanf(f,"%d", &matrice[cToM(i,j,*colonne)] );
c=getc(f);
if(c!='\t' and c!='\n'){
printf("\n\n[ERROR] couldn't load vector [/ERROR]\n\n");
return -1;
}
}
}
printf("\n\n Lettura da file completata!\n");
printf("\n\nDEBUG stampo la matrice...\n");
DEBUG_stampaMatrice(matrice,*righe,*colonne);
printf("\n\n CIAO SONO UN BUG!!!\n\n");
return 0;
}