View Full Version : Errore in Esecuzione programma C++: URGENTISSIMO!!!!!!
Salve a tutti ho un grande problema.........ho sviluppato un programma in C++....
Il programma gira fa le sue iterazioni ma ad un certo punto,che sia a 148 iterazioni ,1000 o altre si blocca e mi da questo errore:
Fault: accesse violation at 0x401 abd: read of address 0x1861000..
Che vuol dire?
Capita con diversi input in momenti differenti ma l'errore mi viene segnalato sempre sulla stessa linea di programma.... Perche me lo fa dopo un po e non subito??
Vi preog ho bisogno di un grande aiuto subito...
Grazie!!
Non sono un esperto di C++, per cui magari non saprò cmq aiutarti, ma anche se lo fossi, senza uno straccio di codice... posta un po' le righe incriminate, se c'è un qualche loop, il tipo di input insomma quanta + roba puoi, se non so aiutarti io qualcuno lo saprà fare ;)
Ecco le Righe incriminate.........Posto la funzione:
void Trova_Soluzioni(void)
{
int a,j;
const int N=100000000;
for(j=0; j<=trx-1; j++){
if(nodo[j]==*costo_max){--------> qui mi si ferma il programma.
Vicinato(j);
for(a=0; a<=canali-1; a++){
if(vicinato[channel[a]]=='si'){
ass[nodo[j]]=channel[a];
soluzione[channel[a]]=Funzione_Obiettivo();
}
else {soluzione[channel[a]]=N;
}
}
for(a=0; a<=canali-1; a++){
if(vicinato[channel_tabu[a]]=='t'){
if(it_tabu[nodo[j]][channel_tabu[a]]<8){
ass[nodo[j]]=channel_tabu[a];
soluzione_tabu[channel_tabu[a]]=Funzione_Obiettivo();
}
else soluzione_tabu[channel_tabu[a]]=N;
}
else soluzione_tabu[channel_tabu[a]]=N;
}
break;
}
}
Ordina_nuova_soluzione();
}
Straniero
06-02-2002, 16:04
"const int N=100000000"
E' errata come linea di programma. Come fai a dichiarare una int (2 byte ca.= max 65536 unsigned) per un valore di 100 milioni?
Non è l'origine del problema ma potrebbe generare soluzioni sbagliate nel resto del programma.
trx immagino sia dichiarata altrove come variabile globale. Prova a controllare come sono dichiarate le variabili. Secondo me sfora e scrive dove non deve.
ilsensine
06-02-2002, 16:13
"const int N=100000000"
E' errata come linea di programma. Come fai a dichiarare una int (2 byte ca.= max 65536 unsigned) per un valore di 100 milioni?
sizeof(int) = 4 byte
Originariamente inviato da Straniero
[B]"const int N=100000000"
E' errata come linea di programma. Come fai a dichiarare una int (2 byte ca.= max 65536 unsigned) per un valore di 100 milioni?
Non è l'origine del problema ma potrebbe generare soluzioni sbagliate nel resto del programma.
trx immagino sia dichiarata altrove come variabile globale. Prova a controllare come sono dichiarate le variabili. Secondo me sfora e scrive dove non deve.
Sono 2 byte se si programma per DOS...
Piuttosto mi sembra che manchi qualche informazione come la dichiarazione delle variabili globali (ma quante ne usi ?!?!? :) )
Invece di usare const int N = 100000000...metti al posto di N INT_MAX in tutta la funzione....
Straniero
07-02-2002, 11:03
Altra cosa che mi è venuta in mente: se ci sono dei puntatori, accertati che puntino alla variabile corretta
Ne uso abbastanza poichè sono variabili che arrivano da altri file che rappresentano le istanza di input.....
Inoltre le dichiaro globali perche devono vivere in tutto il programma.
N l'ho dichiarato cosi alto perche mi serviva per assegnare ad una soluzione che non devo prendere in considerazione un valore elevato in modo da non considerarla quando andavo a ordinare le soluzioni da prendere....
Originariamente inviato da Camacho
[B]N l'ho dichiarato cosi alto perche mi serviva per assegnare ad una soluzione che non devo prendere in considerazione un valore elevato in modo da non considerarla quando andavo a ordinare le soluzioni da prendere....
Appunto usa la costante INT_MAX...
nodo, costo_max
Queste due variabile come sono dichiarate ? A cosa punta costo_max prima di fare il contronto ?
Hai deallocato tutte le varaibili dinamiche che non utilizzi più ?
INT_MAX quanto vale?
Nessun valore può andare oltre INT_MAX?
Le soluzioni danno valori double....mentre le altre variabili sono int perche individuano nodi,canali..
Ciao
INT_MAX è il massimo valore possibile per un intero con segno...
Se usi dei double c'è il massimo anche per quelli...
Come si chiama il massimo per i double?
Secondo te,visto che ho molte variabili globali è megli oche in ogni funzione continui a richiamarle oppure uso funzioni locali e le richiamo nell'intestazione della funzione ?
ciao
nodo e costo_max sono due variabili intere...
nodo è un array che mi indica i nodi del problema mentre costo_max è un puntatore che mi serve per individuare il primo elemento dell'array nodo che devo processare....
Riguardo alle variabili dinamiche,devo in ogni funzione allocare dinamicamente i puntatori?
E se non lo faccio?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.