Освобождение pwfx после бросков waveOutOpen

Согласно документации Microsoft: "Вы можете освободить эту структуру [pwfx] сразу после ее передачи в waveOutOpen".

Но этот код, похоже, не согласен:

pwfx=new WAVEFORMATEX;
pwfx->wFormatTag=WAVE_FORMAT_PCM;
pwfx->nChannels=2;
pwfx->nSamplesPerSec=SPS;
pwfx->nAvgBytesPerSec=SPS*2;
pwfx->nBlockAlign=2;
pwfx->wBitsPerSample=8;
mmres=waveOutOpen(&ghwo,uDeviceID,pwfx,dwCallback,dwCallbackInstance,fdwOpen);
delete pwfx;

изображение на экране с кодом и стеком вызовов

2 ответа

Единственная проблема, которую я вижу в предоставленном вами коде, заключается в том, что вы не полностью инициализировали структуру. Вы не инициализировали cbSize который в этом случае должен быть установлен в 0,

Учитывая, что вы не выделяете никаких дополнительных данных в конце этой структуры, нет необходимости размещать их в куче.

Вполне вероятно, что проблема заключается в других параметрах, которые вы передаете в функцию. Мы не можем видеть их детали и поэтому не можем комментировать.

Вам не нужно new или же delete что-нибудь. Вы можете просто сделать:

WAVEFORMATEX wfx = { };
wfx.wFormatTag=WAVE_FORMAT_PCM;
...
mmres=waveOutOpen(&ghwo,uDeviceID,&wfx,dwCallback,dwCallbackInstance,fdwOpen);

Это помогает вообще?

Другие вопросы по тегам