// 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
intosoundEffects
时,都会触发析构函数SoundEffect
,并且由于某种原因,当析构函数尝试删除时m_data
,我收到错误“访问冲突读取位置 0xCCCCCCCC。我在某处读到此位置表示未初始化的内存什么的。但是在上面的代码片段中,使用 Visual Studio 的调试器,我可以确认指向一个有效m_data
的newSoundEffect
内存序列。我做错了什么?
~SoundEffect()
{
if (m_data != NULL)
delete [] m_data; // Error :(
}
编辑:由于@Chad的建议,我继续在SoundEffect
类中添加了一个复制构造函数,但它没有帮助,因为虽然newSoundEffect
当我尝试将它放入时肯定是构造soundEffects
的,但复制构造函数接收到一个具有未初始化成员变量的对象; 一个未初始化的SoundEffect
.