【问题标题】:DirectSoundBuffer8::Lock/UnlockDirectSoundBuffer8::锁定/解锁
【发布时间】:2023-05-12 01:03:01
【问题描述】:

我的问题一般是关于 DirectSoundBuffer8 的 LockUnlock 方法的行为如何。

我有这样的事情:

unsigned char *bufferPtr;

result = ((IDirectSoundBuffer8*)dsb)->Lock(0,size,(void**)&bufferPtr,(DWORD*)&size, NULL, 0, 0);
if(FAILED(result)) {
    return;
}
memcpy(bufferPtr, waveData, size);
result = ((IDirectSoundBuffer8*)dsb)->Unlock((void*)bufferPtr, size, NULL, 0);
if(FAILED(result)) {
    return;
}
delete[] bufferPtr;

即使不是用new 制作的,我是否真的必须做delete[] bufferPtr;

我使用 mingw 编译我的程序。 delete[] bufferPtr; 的 32 位运行正常,但在 64 位构建中,它会崩溃。

希望有人能启发我。提前致谢!

【问题讨论】:

    标签: c++ winapi mingw32 mingw-w64 directsound


    【解决方案1】:

    不,您绝对不必这样做delete[] bufferPtr。您不拥有该内存,一旦您调用了Unlock,您指向它的指针就不再有效。

    【讨论】: