Oppure

Loading
21/07/11 19:03
anthony015
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:
#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...
aaa
21/07/11 19:20
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?
21/07/11 20:14
anthony015
dubito che sia quello il problema, credo stia nel while{...} dato che modificando quello non crasha...
aaa
21/07/11 20:20
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 ...
21/07/11 21:08
pierotofy
Il problema è dove ha giustamente indicato nessuno.
Il mio blog: piero.dev
22/07/11 0:20
anthony015
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...
aaa
22/07/11 9:26
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.