// Create sound effect
SoundEffect* newSoundEffect = new SoundEffect(frequencyArray);
if (soundEffects.find(name) == soundEffects.end())
soundEffects[name] = (*newSoundEffect);
// Clean up memory
delete [] frequencyArray;
delete newSoundEffect;
frequencyArray
(上图)和 m_data
(下图)是动态分配的。 soundEffects
是一个 std::map
。每当我尝试将 newSoundEffect
指向的值插入 soundEffects
时,SoundEffect
的析构函数就会被触发,并且由于某种原因,当析构函数尝试删除 m_data
,我收到错误“访问冲突读取位置 0xCCCCCCCC。我在某处读到此位置表示未初始化的内存或其他内容。但在上面的代码片段中,使用 Visual Studio 的调试器,我可以确认newSoundEffect
中的 m_data
指向有效的内存序列。我做错了什么?
~SoundEffect()
{
if (m_data != NULL)
delete [] m_data; // Error :(
}
编辑:由于@Chad 的建议,我继续向SoundEffect
类添加了一个复制构造函数,但这并没有帮助,因为虽然 newSoundEffect
肯定是在我尝试将其放入 soundEffects
时构造的,复制构造函数接收一个具有未初始化成员变量的对象;未初始化的 SoundEffect
。
最佳答案
您的 SoundEffect
类将需要一个复制构造函数和复制赋值运算符才能以这种方式使用。
关于C++ 映射插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897574/