Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] puntatore a struttura dichiarato (privato in una classe

    Salve,

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

    codice:
    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
    Alla batteria dai retta ballA

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    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
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Naturalmente ... ci penserà gianvituzzi nel distruttore ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Veramente la domanda era rivolta al gianvituzzi, che a volte li dimentica
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da shodan
    Veramente la domanda era rivolta al gianvituzzi, che a volte li dimentica
    Lo so ... ma era per dargli una mano ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    grazie a tutti, si avevo dimenticato. quindi in pratica:

    codice:
    marameo::~marameo()
    {
           delete[] buff;
    }
    vero?
    Alla batteria dai retta ballA

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    E tutto quello che ti ho detto sull'inizializzazione e il controllo che il puntatore sia valido?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    codice:
    marameo::marameo() : buff(NULL) { }
    può andare bene questo? o magari:

    codice:
    marameo::marameo() { buff = {0} }
    grazie
    Alla batteria dai retta ballA

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da gianvituzzi
    codice:
    marameo::marameo() : buff(NULL) { }
    Questo.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.