anthony015 (Member)
Pro
Messaggi: 116
Iscritto: 20/05/2011
|
questa sarebbe una banale funzione che mi dovrebbe trasformare i caratteri letti da un file di numeri, in interi(ogni riga contiene un intero), nulla di difficile, ma all'esecuzione il programma crasha, per cui ho ritenuto opportuno debuggare per cercare di capire dove stava l'errore, soltanto che debuggando il programma non crasha e funziona come dovrebbe...
il codice è questo:
Codice sorgente - presumibilmente C++ |
#include"stdafx.h" #include<cstdlib> #include<stdio.h> #include<ctype.h> #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { FILE *input; char* datiLetti=new char[]; int interoLetto; int* intLetti=new int[]; input=fopen("prova.txt","r"); if(input) cout<<"Apertura avvenuta con successo\n\n"; else { cout<<"Errore nell'apertura del file!\n"; system("pause"); return(EXIT_FAILURE); } int indice=0; while(fgets(datiLetti,3,input)!=NULL) { interoLetto=atoi(datiLetti); if(interoLetto!=0) //ho fatto questa funzione perché dentro interoLetto mi trovavo degli 0 senza saperne il motivo(tanto nel file dal quale devo leggere i numeri sono tutti >0) { *(intLetti+indice)=interoLetto; indice++; } } for(int i=0;i<indice;i++) cout<<*(intLetti+i)<<endl; cout<<endl<<endl; system("pause"); }
|
prova.txt contiene questo:
12
5
32
compilato con visual c++ 2010 e debuggato tramite visual studio 2010...
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Beh ... ma che vuol dire
char* datiLetti=new char[];
int* intLetti=new int[];
??
Così non allochi lo spazio per i vettori ... e poi ti meravigli che va in crash?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
anthony015 (Member)
Pro
Messaggi: 116
Iscritto: 20/05/2011
|
dubito che sia quello il problema, credo stia nel while{...} dato che modificando quello non crasha...
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Postato originariamente da anthony015:
dubito che sia quello il problema, credo stia nel while{...} dato che modificando quello non crasha... |
Se non vuoi accettare il mio consiglio, fai pure ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Il problema è dove ha giustamente indicato nessuno.
|
|
anthony015 (Member)
Pro
Messaggi: 116
Iscritto: 20/05/2011
|
Postato originariamente da nessuno:
Beh ... ma che vuol dire
char* datiLetti=new char[];
int* intLetti=new int[];
??
Così non allochi lo spazio per i vettori ... e poi ti meravigli che va in crash? |
cavolo, avevi ragione, mi scuso per il fatto di aver dubitato della tua soluzione e non averla provata subito
ora, però, mi piacerebbe sapere il motivo della corretta esecuzione durante il debug, anziché il crash, come in normale esecuzione... |
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Postato originariamente da anthony015:
cavolo, avevi ragione, |
Ma dai ...
ora, però, mi piacerebbe sapere il motivo della corretta esecuzione durante il debug, anziché il crash, come in normale esecuzione... |
Basta avere qualche nozione di architettura dei sistemi per rispondere alla tua domanda ...
Se la memoria non è allocata correttamente, il comportamento del programma è "imprevedibile" perché accede - sporcandola - a memoria adibita ad altri scopi che, da un'esecuzione all'altra e da un ambiente all'altro, possono avere significati diversi.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|