C++ FMod内存流问题

C++ FMod内存流问题,c++,access-violation,fmod,C++,Access Violation,Fmod,编辑:嗯……那很有趣。我将设置设置为指针,并将其传递。工作得很好。这就解决了。我会让好奇的人知道答案 我在FMod中从内存流创建声音时遇到问题。我查看了FMod附带的loadfrommemory示例,并遵循了该示例。首先,我正在使用的代码 CSFX::CSFX(CFileData *fileData) { FMOD_RESULT result; FMOD_CREATESOUNDEXINFO settings; settings.cbsize = sizeof(FMOD_CREATESOUNDEX

编辑:嗯……那很有趣。我将设置设置为指针,并将其传递。工作得很好。这就解决了。我会让好奇的人知道答案

我在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);
}
CSFX::CSFX(CFileData*fileData)
{
FMOD_结果;
FMOD_CREATESOUNDEXINFO设置;
settings.cbsize=sizeof(FMOD_CREATESOUNDEXINFO);
settings.length=fileData->getSize();
_声音=0;
std::string temp=“”;
对于(inti=0;igetSize();i++)
temp+=fileData->getData()[i];
结果=tempSys->createSound(temp.c_str()、FMOD_软件、FMOD_OPENMEMORY、设置和声音);
}
就像这样,我在tempSys->createSound()上遇到访问冲突。我已经确认tempSys在从文件创建声音时有效。我还通过将内容写入一个文件来确认我的数据中的char*是有效的,然后我可以在Media Player中打开该文件。我感觉设置有问题。如果我将该参数更改为0,程序不会崩溃,结果是result=FMOD\u ERR\u INVALID\u 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;
}
CSFX::CSFX(CFileData*fileData)
{
FMOD_结果;
FMOD_CREATESOUNDEXINFO*设置;
_声音=0;
std::string temp=“”;
对于(inti=0;igetSize();i++)
temp+=fileData->getData()[i];
设置=新FMOD_CREATESOUNDEXINFO();
设置->cbsize=sizeof(FMOD_CREATESOUNDEXINFO);
设置->长度=文件数据->获取大小();
结果=tempSys->createSound(temp.c_str()、FMOD_软件、FMOD_OPENMEMORY、设置和声音);
删除设置;
设置=0;
}

在使用之前,您需要先设置memset设置

memset(&settings,0,sizeof(FMOD_CREATESOUNDEXINFO)

否则它将包含垃圾并可能崩溃