Salve a tutti
12/09/2023 - Rocco ha scritto:
Ho trovato che alcune variabili che avevo definito ed allocato non venivano utilizzate per cui dopo averle rimosse il problema si è risolto. Strano però che nell'altro pc non segnalava errori. Grazie!
non vorrei essere pessimista ma da questa descrizione , “spero di sbagliarmi”, non hai risolto il problema ma hai messo le cartacce delle carammelle sotto il tappeto.
i consigli che mi vengono in mente sono:
1 rimetti le variabili che hai tolto e inizia a toglierne una per volta, ricompila e rilancia il processo e vedi che succede (nel pc dove il processo va' in crash).
magari cìè una situazione del tipo :
// uno dei mille esempi di violazione di memoria
int variaibile_inutile_1=3;
int array[10];
int variaibile_inutile_2=5;
....
array[10] = 30 // <<-- stai sporcando la variabile_inutile_2
cout << "variaibile_inutile_2" << variaibile_inutile_2 << endl; //la variabilie_inutile_2 ha come valore 30
.....
se il processo che gira utilizza pochi KB di RAM (un file main.cpp con 100 righe di codice) , questo esempio va' sempre in SEGMENTATION FAULT o in CRASH come preferisci
se il processo in questione occupa decine di MB 60MB o 100MB non sempre esce fuori.
inizializza le variabili che non usi e controlla se queste a fine processo se hanno il valore che non ti aspetti.
se così fosse la violazione di memoria è causata da un puntatore,o un array, che è dichiarato vicino dove alla dichiarazione delle variabili inutilizzate, come nell'esempio sopra.
al netto che il codice e parametri di configurazione siano gli stessi, il fatto che su un pc esce fuori e sull'altro no, dipende :
- dalla versione del OS che stai utilizzando
- probabilmente anche dall'architettura 32bit o 64bit , AMD o Intel
- quantità di RAM su uno c'è 16GB di RAM e un altro 32GB, etc.etc .
- numero di processi , sul pc che funziona di sono 30 processi attivi (c'è margine di sporcamento) e su quello che non funziona ci sono 50 processi attivi appena c'è una violazione va' in crash perchè lo spazio in RAM e minore, puo' accadere anche il contrario.
2 cerca di capire se l'eccezione che esce è riproducibile o randomica
randomica intendo che l'eccezione esce a caso: dopo 3 secondi, dopo 1ora, dopo 3 giorni,
riproducibile intendo che il processo si inchioda sempre quando intraprende una azione specifica.
3. lancia il processo da visual studio utilizzando il debbug
se siamo fortunati ci dovrebbe dare una indicazione dove si rompe il processo.
4. utilizza log
come dice Oregon utilizza dei log per capire dove si rompe il processo, anche se questi potrebbero nasconderti il problema.
Sotto linux c'è un tool che si chiama Valgrind (molte volte mi ha salvato la pelle)
per le violazioni o memory leak, e altre problematiche inerenti alla gestione della memoria,
non so' se sotto windows c'è un tool simile
Spero di averti dato qualche dritta.
Armati di tanta tanta tanta e tanta PAZIENZA, non sei il primo che si è imbattuto in problemi del genere,
io ho fatto nottate, a ridosso dei giorni di collaudo e rilascio :)