PDA

Visualizza la versione completa : [C++] Processo killato dal sistema operativo


frodo_jedi
27-11-2005, 18:09
Ciao a tutti,
chi mi sa dire per favore quali sono le ragioni per
cui un processo pu venire killato dal sistema operativo?

Ho scritto un programma in c++ che richiede molte risorse computazionali (deve fare nolti calcoli) e credo che questa sia l'unica ragione per cui dopo averlo lanciato da shell
linux ottengo "Killed" (ma anche se fosse questa la causa
cosa ci posso fare?).

Per quanto riguarda la memoria pendo che i problemi non siano l.

Help!!!!!!!!!!!

oregon
27-11-2005, 18:32
Non credo che venga killato perche' fa molti calcoli (!)

Probabilmente alloca troppa memoria o produce troppi memory leak ...

O tenta di accedere a porzioni di memoria che non sono di sua competenza ...

Bisognerebbe vedere il codice ... isolando le varie porzioni per cercare di individuare il problema ...

frodo_jedi
27-11-2005, 18:47
Ciao Oregon grazie per continuare a rispondermi!

Ascolta il memory leak si verifica quando non si fanno dei delete?
Io credo di averli fatti tutti.

Hai scrtto.
"O tenta di accedere a porzioni di memoria che non sono di sua competenza ..."
ma come possibile? sarebbe andato in sementation fault giusto?
In caso contrario sai qual un
modo per vederlo?....mi rendo conto che la domanda
potrebbe essere stupida ma magari un aiutino me lo sai dare!

oregon
27-11-2005, 19:08
Certo se non fai i corrispondenti delete ...

E' anche vero il fatto del segmentation fault ma probabilmente il sistema operativo intercetta questi tentativi e provvede ...

Un aiuto non so come dartelo senza vedere il codice ... ti consiglio di escludere parti del codice e provare ... piano piano dovresti individuare l'area del codice dove si presenta il problema ...

frodo_jedi
27-11-2005, 21:33
Ciao Oregon,
forse ho capito il mio problema probabilmento non dealloco memoria:
siano m e y dei puntatori ad un oggetto;
ad un certo punto inizializzo m;
poi voglio fare y = m;

come faccio a distruggere m che non
mi serve pi?
se faccio delete m mi distrugge ci che puntato da
m, che la stessa cosa a cui punta anvhe y e dunque non va bene...

Come si fa? Il mio problema dovrebbe essere questo!

frodo_jedi
27-11-2005, 22:22
Ciao a tutti,
non so come deallocare la memoria nel seguente caso:

siano m e y dei puntatori ad un oggetto;
ad un certo punto inizializzo m;
poi voglio fare y = m; (ALIASING...)

come faccio a distruggere m che non
mi serve pi?
se faccio delete m mi distrugge ci che puntato da
m, che la stessa cosa a cui punta anvhe y e dunque non va bene...

Ma allora come si fa?

oregon
27-11-2005, 22:36
Una cosa e' deallocare la memoria, un'altra eliminare il puntatore.

Se la variabile puntatore e' locale, viene eliminata alla fine della funzione. Se e' globale alla fine del programma.

Ma non e' molto importante eliminare il puntatore. Importante e' la gestione della memoria ...

Se non ho capito il problema, dimmelo, ma mostra anche il codice a cui fai riferimento ...

frodo_jedi
27-11-2005, 22:47
Hai colto il problema.
Ma non siamo nel caso di memory leack?
se faccio una inizializzazione del tipo puntatore = puntatore
entrambe le variabili puntano alla stessa cella di memoria.
Quindi non ha senso distruggere la variabile a destra dell'uguale
(che secondo ci che mi hai detto tu dovrebbe essere automaticamente distrutta dal compilatore).

Esattamente ho fatto:
Oggetto * m = new Oggetto();
Oggetto * y = new Oggetto();
delete m;//per evitare il memory leack
delete y;

m = ...// istanzio l'oggetto
y = m;

Ora non mi serve distruggere m (perch lo fa il compilatore vero?).
Ma allora non so perch il mio programma viene killato dal sistema operativo (killed) (c' una funzione con quel pezzo di codice che viene chiamata migliaia di volte).

Fammi sapere se ho fatto giusto secondo te per favore!

oregon
27-11-2005, 22:51
Un attimo ... mostra tutto il codice esatto ... specialmente il contesto (ad esempio le funzioni in cui si trova il codice ...) ...

Questo codice, per esempio

Oggetto * m = new Oggetto();
Oggetto * y = new Oggetto();
delete m;//per evitare il memory leack
delete y;

m = ...// istanzio l'oggetto
y = m;

dove e' posto ...? Specifica meglio ...

oregon
27-11-2005, 22:59
Meglio ... se hai questo codice



int main(int argc, char* argv[])
{
Oggetto *m = new Oggetto();
Oggetto *y = new Oggetto();
delete m;
delete y;

m = new Oggetto();
y = m;

delete y; // oppure delete m, ma non entrambe

return 0;
}


l'ultima delete deve essere

delete y

oppure

delete m

(e' indifferente) ma non ambedue.

Loading