PDA

View Full Version : [c++]Liste dinamiche di stringhe


Re Lothar
19-11-2007, 13:30
Volevo dei chiarimenti riguardo l'inclusione di stringhe in liste dinamiche, vi faccio vedere come ho fatto io:

#include <iostream>
#include <string>
using namespace std;

struct lista {
string nome;
lista *next;
};

int main() {
lista *p0;
p0->nome = "prova";
p0->next = NULL;
cout<<p0->nome;
}

Se vado a compilare non mi da nessun errore, mentre se lo faccio partire mi da :
Segmentation fault (core dumped)

Dove è che sbaglio?

vizzz
19-11-2007, 13:43
manca la new della tua struct!
e ricordati anche la delete finale.

AnonimoVeneziano
19-11-2007, 13:44
Volevo dei chiarimenti riguardo l'inclusione di stringhe in liste dinamiche, vi faccio vedere come ho fatto io:

#include <iostream>
#include <string>
using namespace std;

struct lista {
string nome;
lista *next;
};

int main() {
lista *p0;
p0->nome = "prova";
p0->next = NULL;
cout<<p0->nome;
}

Se vado a compilare non mi da nessun errore, mentre se lo faccio partire mi da :
Segmentation fault (core dumped)

Dove è che sbaglio?

Non hai inizializzato p0 .

"lista *p0 = new struct lista;"

Ciao

Re Lothar
19-11-2007, 14:32
manca la new della tua struct!
e ricordati anche la delete finale.

mio dio che sbadato!! grazie è vero...

comunque per un programma di prova come questo, dove l'unico obiettivo è stampare quel valore, serve ugualmente usare delete alla fine?
è vero che se non lo faccio la memoria rimane allocata anche quando lo chiudo?

vizzz
19-11-2007, 14:34
mio dio che sbadato!! grazie è vero...

comunque per un programma di prova come questo, dove l'unico obiettivo è stampare quel valore, serve ugualmente usare delete alla fine?
è vero che se non lo faccio la memoria rimane allocata anche quando lo chiudo?

si, generi dei memory leak.

Re Lothar
19-11-2007, 14:35
si, generi dei memory leak.

caspita, questa cosa è micidiale, quindi in un ipotetico caso che io apra e chiuda tante volte il programma, alla fine riempio tutta la memoria??

e se la volessi liberare una volta chiuso sto programma c'è un modo o devo per forza riavviare?!?

vizzz
19-11-2007, 14:41
caspita, questa cosa è micidiale, quindi in un ipotetico caso che io apra e chiuda tante volte il programma, alla fine riempio tutta la memoria??

e se la volessi liberare una volta chiuso sto programma c'è un modo o devo per forza riavviare?!?

nel tuo caso il memory leak all'uscita del programma dovrebbe essere gestito dal sistema operativo, che rende di nuovo disponibile l'area di memoria.
la cosa è ben diversa se il tuo programma resta in esecuzione e continua a mangiare memoria senza deallocarla, allora si potrebbe arrivare anche a schiantare una macchina :D
in altri linguaggi questo non è possibile perchè l'allocazione è gestita da un garbage collector.

Re Lothar
19-11-2007, 14:52
ok ho capito, grazie :D

variabilepippo
19-11-2007, 15:00
Volevo dei chiarimenti riguardo l'inclusione di stringhe in liste dinamiche

Io userei i contenitori della STL senza re-inventare la ruota... :rolleyes: