Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - incongruenza tra risultati di debug ed esecuzione
Forum - C/C++ - incongruenza tra risultati di debug ed esecuzione

Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 21:03
Giovedì, 21/07/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++

  1. #include"stdafx.h"
  2. #include<cstdlib>
  3. #include<stdio.h>
  4. #include<ctype.h>
  5. #include<iostream>
  6.  
  7. using namespace std;
  8.  
  9. int _tmain(int argc, _TCHAR* argv[])
  10. {
  11.         FILE *input;
  12.         char* datiLetti=new char[];
  13.         int interoLetto;
  14.         int* intLetti=new int[];
  15.         input=fopen("prova.txt","r");
  16.         if(input)
  17.                 cout<<"Apertura avvenuta con successo\n\n";
  18.         else
  19.         {
  20.                 cout<<"Errore nell'apertura del file!\n";
  21.                 system("pause");
  22.                 return(EXIT_FAILURE);
  23.         }
  24.         int indice=0;
  25.         while(fgets(datiLetti,3,input)!=NULL)
  26.         {
  27.                 interoLetto=atoi(datiLetti);
  28.                 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)
  29.                 {
  30.                         *(intLetti+indice)=interoLetto;
  31.                         indice++;
  32.                 }
  33.         }
  34.         for(int i=0;i<indice;i++)
  35.                 cout<<*(intLetti+i)<<endl;
  36.         cout<<endl<<endl;
  37.         system("pause");
  38. }


prova.txt contiene questo:
12
5
32

compilato con visual c++ 2010 e debuggato tramite visual studio 2010...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:20
Giovedì, 21/07/2011
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à.
PM Quote
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 22:14
Giovedì, 21/07/2011
dubito che sia quello il problema, credo stia nel while{...} dato che modificando quello non crasha...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:20
Giovedì, 21/07/2011
Testo quotato

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à.
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:08
Giovedì, 21/07/2011
Il problema è dove ha giustamente indicato nessuno.


Il mio blog: https://piero.dev
PM Quote
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 2:20
Venerdì, 22/07/2011
Testo quotato

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 :hail:
ora, però, mi piacerebbe sapere il motivo della corretta esecuzione durante il debug, anziché il crash, come in normale esecuzione...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:26
Venerdì, 22/07/2011
Testo quotato

Postato originariamente da anthony015:
cavolo, avevi ragione,



Ma dai ... :)

Testo quotato

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à.
PM Quote