|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Mar 2006
Messaggi: 19
|
Aiuto su codice c++
Salve a tutti
premetto che sono alle prime armi con il c++ , nn riesco proprio a capire perchè mi da errore in esecuzione questo codice class contesto { private: list<int> **m; public: contesto(); }; contesto::contesto() { m = new list<int>*[2]; m[0]->push_back(1); m[0]->push_back(2); m[1]->push_back(3); m[1]->push_back(4); } E nel main una semplice dichiarazione int main() { contesto *p=new contesto(); } Il compilatore dice che va bene.. ma in esecuzione mi si blocca... E se non inserisco elementi nella lista tutto funziona. Grazie per ora dei vostri consigli |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Codice:
class contesto
{
private:
list<int> *m;
public:
contesto();
};
contesto::contesto()
{
m = new list<int>[2];
m[0].push_back(1);
m[0].push_back(2);
m[1].push_back(3);
m[1].push_back(4);
}
|
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Mar 2006
Messaggi: 19
|
thanks
Intanto grazie
La differenza praticamente e questa list<int> **m; (scritta da me) a questa list<int> *m; (scritta da te) puoi spiegarmi perchè il compilatore non segnalava errori? Cioè quello che ho scritto io, era effettivamente una dichiarazione di un puntatore ad un array di puntatori a liste? (oppure ho dichiarato chissa cosa) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Tu hai dichiarato un puntatore a puntatore a List<int>...hai allocato due puntatori a list<int>, ma non hai allocato list<int> all'indirizzo puntato da m[0] e m[1]...l'errore non lo può dare in compilazione perchè il tipo era giusto (m[0]-> accedeva in questo caso ad un oggetto di tipo list<int>, quindi il tipo torna, ma tale oggetto non era allocato ed in quanto tale genera l'errore a runtime)...
In questo caso si fa lo stesso discorso che si fa per i vettori dinamici di interi: int *a; a = new int[2]; Se avessi voluto far tornare tutto, sarebbe bastato aggiungere: *m[0] = new list<int>; *m[1] = new list<int>; |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Mar 2006
Messaggi: 19
|
thanks
ottimo direi
grazie ancora |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:32.



















