c++ - FMod内存流问题

标签 c++ access-violation fmod

编辑:嗯...这很有趣。我将设置设置为指针并将其传递。工作得很好。所以,这就解决了。对于任何对答案感到好奇的人,我都会将其打开。

我在从内存流在 FMod 中创建声音时遇到问题。我查看了 FMod 附带的 loadfrommemory 示例并遵循了该示例。首先,我正在使用的代码...

CSFX::CSFX(CFileData *fileData)
{
FMOD_RESULT result;
FMOD_CREATESOUNDEXINFO settings;
settings.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
settings.length = fileData->getSize();
_Sound = 0;
std::string temp = "";

for (int i = 0; i < fileData->getSize(); i++)
    temp += fileData->getData()[i];

result = tempSys->createSound(temp.c_str(), FMOD_SOFTWARE | FMOD_OPENMEMORY, &settings,        &_Sound);
}

就像这样,我在 tempSys->createSound() 上遇到访问冲突。我已经确认 tempSys 是有效的,因为它在从文件创建声音时有效。我还通过将内容写入文件确认了包含我的数据的 char * 是有效的,然后我可以在 Media Player 中打开该文件。感觉设置有问题如果我将该参数更改为 0,程序不会崩溃,我最终会得到 result = FMOD_ERR_INVALID_HANDLE(考虑到第三个参数为 0,这是有道理的)。知道我做错了什么吗?

此外,请忽略 std::string 的使用,我将其用于某些测试目的。

最佳答案

通过将设置变成指针来解决。见下面的代码:

CSFX::CSFX(CFileData *fileData)
{
FMOD_RESULT result;
FMOD_CREATESOUNDEXINFO * settings;

_Sound = 0;
std::string temp = "";

for (int i = 0; i < fileData->getSize(); i++)
    temp += fileData->getData()[i];
settings = new FMOD_CREATESOUNDEXINFO();
settings->cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
settings->length = fileData->getSize();

result = tempSys->createSound(temp.c_str(), FMOD_SOFTWARE | FMOD_OPENMEMORY, settings, &_Sound);
delete settings;
settings = 0;
}

关于c++ - FMod内存流问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508627/

相关文章:

c++ - C++中的并行数组

C++:访问冲突写入位置

c - x86 程序集小写未处理异常

iphone - 不能在 iOS 上包含 FMOD

c - 余数 (x,y) 真的是 x-((round(x/y)*y) 吗?

c++ - 如何在 C++ 中保留未定义的声明函数,如 Haskell 中的 `undefined`?

c++ - 在 main.cpp 或 mainwindow.cpp 中的何处编写我的代码

c++ - "multiple template parameter lists are not allowed"?

c++ - new int[] 抛出 'Access Violation' 异常

iphone - FMOD 停止或重置 DSP?