PDA

Visualizza la versione completa : [C++] puntatore a struttura dichiarato (privato in una classe


gianvituzzi
11-01-2010, 18:39
Salve,

ho un problema con il seguente codice (che ho sintetizzato molto):



class marameo
{
public:
void start();
void stop();
private:
WAVEHDR *buff;
HWAVEIN hwi;
}

void marameo::start()
{
WAVEHDR *buff = new WAVEHDR[2];

waveInPrepareHeader(hwi, &buff[0], sizeof(WAVEHDR));
waveInPrepareHeader(hwi, &buff[1], sizeof(WAVEHDR));
}

void marameo::stop()
{
waveInUnprepareHeader(hwi, &buff[0], sizeof(WAVEHDR));
waveInUnprepareHeader(hwi, &buff[1], sizeof(WAVEHDR));
}


in pratica ho bisogno che il puntatore a WAVEHDR sia visibile e utilizabile da start() e stop(), quindi lo dichiaro nella classe e poi lo imposto in start(). Purtroppo stop() non lo vede e il codice mi riporta "unhanlde exception" forse l'ho definito male in start() ??

grazie

oregon
11-01-2010, 18:54
PerchŔ lo hai ridefinito localmente nella start?

Dato che gia' esiste, devi scrivere

buff = new WAVEHDR[2];

E ti consiglio di

1) inizializzare il puntatore a NULL nel costruttore

2) controllare che il puntatore sia valido prima di utilizzarlo

shodan
11-01-2010, 19:24
Io mi chiederei anche chi libera la memoria alla fine.
Il C++ non ha nessun Garbage Collector, quindi la memoria rimane allocata fino al termine del programma.

oregon
11-01-2010, 19:25
Naturalmente ... ci penserÓ gianvituzzi nel distruttore ... :)

shodan
11-01-2010, 19:36
:) Veramente la domanda era rivolta al gianvituzzi, che a volte li dimentica :)

oregon
11-01-2010, 19:39
Originariamente inviato da shodan
:) Veramente la domanda era rivolta al gianvituzzi, che a volte li dimentica :)

Lo so ... ma era per dargli una mano ... :zizi:

gianvituzzi
11-01-2010, 21:03
grazie a tutti, si avevo dimenticato. quindi in pratica:



marameo::~marameo()
{
delete[] buff;
}


vero?

oregon
11-01-2010, 21:12
E tutto quello che ti ho detto sull'inizializzazione e il controllo che il puntatore sia valido?

gianvituzzi
11-01-2010, 21:46
marameo::marameo() : buff(NULL) { }


pu˛ andare bene questo? o magari:



marameo::marameo() { buff = {0} }


grazie

shodan
11-01-2010, 21:55
Originariamente inviato da gianvituzzi


marameo::marameo() : buff(NULL) { }



Questo.

Loading