Newsgroup: it.comp.lang.c++
Titolo: Cancellazione della Memoria

Salve a tutti,
ho un quesito da porvi:
devo far eseguire ad un programma (realizzato in Visual C++ 6) una serie 
di test, o meglio vorrei poter runnare il programma più volte senza 
dover ogni volta chiudere e riaprire l'applicazione. Il problema è che 
se non faccio questa operazione (chiudi e riapri) quando vado a lanciare 
il secondo test mi esce tutto scasinato perché tiene in memoria il 
valore delle variabili del vecchio test. Come posso fare per 
reinizializzare le variabili in memoria senza dover uscire dal programma?
grazie per l'aiuto e se sono stato poco chiaro sono a disposizione per 
delucidazioni.
ciao :)

 wrote

Ovviamente non capisco il problema, la soluzione che ho da proporti sembra
banale quindi per fare spiegati meglio.
Tommy

 Tommy
Cerco di spiegarmi meglio:
quello in questione è un software di test che deve eseguire appunto dei 
test su un programma importato al suo interno. Gli input a questi testi 
sono salvati in dei file esterni dai quali vengono letti i valori delle 
variabili di input; viene eseguito il test e i risultati vengono 
confrontati con quelli contenuti in altri file di output forniti. Io ho 
a disposizione più file di input e di output per provare più casi di 
test; tuttavia il problema sta nel fatto che se per esempio vado ad 
eseguire il test n.2 (file input n.2) questo darà come risultato NOT OK 
perché ho notato che le locazioni di memoria delle variabili, rimangono 
"sporche" con i dati del test n.1. Finora per eseguire il test n.2 dopo 
il test n.1 ho sempre chiuso l'applicazione per poi riavviarla: in 
questo modo le locazioni di memoria erano reinizializzate. Quello che io 
vorrei fare è eseguire il test n.2 senza dover riavviare il software di 
test; praticamente volevo sapere se esisteva un modo (una particolare 
funzione?) per ripulire la memoria mentre il software è in esecuzione.
spero di essermi spegato un po' meglio, cmq sono sempre qua...
ciao e grazie!

 reinizializzare le variabili in memoria senza dover uscire dal programma?
Prova a chiamare _exec o simili con lo stesso file del programma che hai
lanciato.
Saluti
-- 
alef


Non credo che una funzione del genere ci sia.
Sei tu che devi inizializzare le "locazioni di memoria delle variabili"
prima di eseguire i test. Se non lo fai tutto puo' accadere.
 bye
	av.

 ciao e grazie!
Continuo a non capire il problema.
Se sono variabili automatiche verranno ri-create e ri-inizializzate (se le
inizializzi).
Se sono variabili globali invece, allora non verranno ricreate, dovrai
quindi ri-inizializzarle in un altro punto, esempio:
int globale = 5;
int main()
{
        // primo test
         ............... // usa globale
        globale = 5;
        // secondo test
        ...................  // usa globale
}
ovviamente non e' una buona soluzione, quando riesci evita le globali ed usa
una struttura del genere:
test(.....)
{
        int locale = 5;
        ................   // usa locale
}
int main()
{
        // primo test
        test(...);
        // secondo test
        test(.....):
}
in questo modo basta inizializare in una sola parte del codice.
Tommy

Effettivamente c'è un'incomprensione...i test vengono svolti in una 
maniera differente: il software, nella sua esecuzione "normale", riceve 
dei dati in input da dispositivi esterni, li "macina" tramite degli 
algoritmi e li fornisce in output sempre a dispositivi esterni. Per il 
testing di questo sw i dati provenienti da dispositivi esterni vengono 
simulati (ed effettivamente si tratta di un simulatore :) ) da file di 
input che contengono i dati stessi. Durante il test viene semplicemente 
lanciato il sw che anziché acquisire dati da dispositivi esterni li 
acquisisce da file. Quindi, sintetizzando al massimo si avrebbe:
void main (void)
{
     LEGGI_DATI_DA_INPUT();   //nel caso di test dal file
     /*lancia il software da testare*/
     ...............
     ...............
     ...............
     /*confronta i valori ottenuti dagli algoritmi con quelli attesi*/
     VERIFICA_OUTPUT();
     /*FINE ESECUZIONE*/
}
Ora per l'input ho a disposizione più file che posso scegliere (tutto 
tramite GUI):
file_input_1.dat
...
file_input_n.dat
Quello che ho notato è che una volta concluso il test con 
file_input_1.dat, se rilancio la simulazione con un nuovo file_input 
SENZA PRIMA AVER RIAVVIATO (chiuso e riaperto) il simulatore, i 
risultati vengono totalmente sballati perché ho notato che la memoria 
rimane "sporca" con i vecchi dati (sia di input sia intermedi). 
Effettivamente molte (quasi tutte le variabili) sono globali, tuttavia 
non ho la possibilità di modificare l'architettura del software perché 
non l'ho fatto io :(
C'è quindi un modo per sopperire a questo problema?
Ti ringrazio per la disponibilità!
Tommy ha scritto:


 C'è quindi un modo per sopperire a questo problema?
Si, re-inizializzare tutte le variabili globali e statiche nella funzione
che legge il file, cosi' quando leggi il nuovo file "pulisci" la memoria.
Tommy

MarVin wrote:

Dovresti porre il software da testare in un programma separato.
Il simulatore lancia il programma e ne attende la terminazione.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

Grazie a tutti per le risposte, farò delle prove e casomai tornerò alla 
carica ;)
ciao
Carlo Milanesi ha scritto:
