|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 284
|
[C++] Help programma Crasha -Esame venerdì
file porto.h
Codice:
Codice:
#include<fstream>
#include<cstdlib>
#include<iostream>
using namespace std;
struct section {
int boat;
int ord;
int max;
int* matricola;
section* pun;
};
class porto {
public:
section* p0;
porto() { p0->pun == 0; p0->ord =0;}
bool adds(int max, int pos);
bool addb( int m);
void stampa();
};
Codice:
file porto.cpp
Codice:
#include"porto.h"
bool porto::adds(int max, int pos) {
section* p;
section* q;
section* r;
for (p=p0;p !=0;p= p->pun)
{
q=p->pun;
if (p->ord<pos && q->ord>=pos)
{
r = new section;
r->max = max;
r->boat=0;
r->matricola= new int[max];
for (int i=0;i<max;i++)
{ r->matricola[i]=0;}
r->ord = pos;
r->pun = q;
p->pun = r;
return true;
}
cout<<"error"<<endl;
return false;
}
if (p0->pun == 0)
{ p0->boat= 0;
p0->max = max;
p0->matricola= new int[max];
return true;}
}
bool porto::addb(int m) {
section* p = p0;
for (;p->pun !=0;p=p->pun)
{
if (p->boat < p->max) {
for (int i=0;i<p->max;i++)
{ if (p->matricola[i] ==0)
{ p->matricola[i]== m;
p->boat++;
return true;}
}
}
if (p0->ord ==0){return false;}
}}
void porto::stampa() {
section* p;
for (p=p0;p !=0;p= p->pun)
{
cout<<p->ord<<": ";
for (int i=0;i<p->max;i++)
{
cout<<p->matricola[i]<<", ";}
cout<<endl;}
return;}
Codice:
file main.cpp
Codice:
#include"porto.h"
int main()
{porto a;
a.adds(2,0);
a.adds(3,1);
a.adds(3,0);
a.adds(2,2);
a.addb(12);
a.addb(22);
a.addb(15);
a.stampa();
system("pause");
return 0;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
E p0 chi lo alloca, e quando?
Mi sono fermato a quest'errore e non ho visto il resto, quindi potrebbe esserci altro che non va. Prova.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Dec 2007
Messaggi: 284
|
Quote:
ho aggiornato così: Codice:
class porto {
public:
section* p0;
porto() { p0 = new section; p0->pun = 0; p0->ord =0;}
bool adds(int max, int pos);
bool addb( int m);
void stampa();
};
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 937
|
Regola numero 1: metti sempre controlli!
Meglio un controllo superfluo (in molti casi e' l'ottimizzazione del compilatore che li salta se veramente non servono) che rischiare un crash per non averlo messo! Regola numero 2: quello che allochi nei costruttori in genere lo devi deallocare nei distruttori Regola numero 3: non dare per scontato che le allocazioni vadano bene. Regola numero 4: quando DICHIARI un puntatore inizializzalo sempre con qualcosa magari con 0 (0 in C++ e' il valore di NULL) Regola numero 5: prima di usare un puntatore CONTROLLA CHE NON SIA NULL/0 (questa regola va a braccetto con la 4: avere un puntatore NON NULL comunque NON significa avere un puntatore valido) In genere e' furbo fare una cosa del tipo Codice:
myType* p(0);
try
{
p = new myType(parametri);
p->ciccio();
}
catch (const std::bad_alloc& ba)
{
std::cerr << "Ho fallito l'allocazione - " << ba.what() << std::endl;
}
catch (...)
{
std::cerr << "Problemi non ben identificati nel blocco try " << std::endl;
}
[...]
// devo chiamare la funzione pluto() di p, ma NON sono sicuro che p sia valido
if (p) p->pluto();
Ciao, Mr Hyde
__________________
MacMini Late 2009/MacMini 2018 Ultima modifica di mr_hyde : 14-01-2009 alle 16:31. |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 284
|
grazie il codice l'avevo già rivisto ma mi sono dimenticato di aggiornare li.
cmq non so usare il debug perchè ancora nn ce l'hanno spiegato dopo aggiorno |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:11.




















