【问题标题】:FMOD leaking while playing sound播放声音时 FMOD 泄漏
【发布时间】:2015-05-08 22:27:45
【问题描述】:

我在做一个小游戏,加声音就好了……

但是我泄露了很多,即使我试图删除所有内容并在互联网上查找信息......

这是我的代码:

#include "../../api/inc/fmod.hpp"
#include "../../api/inc/fmod_errors.h"                                                                                                                                                       
#include <iostream>
#include <string>

int     main()
{
  FMOD::System *system = NULL;
  FMOD::System_Create(&system);
  system->init(100, FMOD_INIT_NORMAL, 0);

  FMOD::Channel *channel = NULL;
  FMOD::Sound *sound = NULL;

  while(true)
    {
      system->createSound("music.waw", FMOD_DEFAULT, FMOD_DEFAULT ,&sound);

      FMOD_RESULT result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);

      system->update();
    }
  system->release();                                                                                                                                                                          
  system = NULL;
  delete (system);
  delete (sound);
  delete (channel);
  return (0);
}

我很担心,因为如果我玩游戏的时间足够长,我的记忆就会完全填满…… 我应该怎么办? 我做错了什么?

【问题讨论】:

    标签: c++ audio fmod


    【解决方案1】:

    播放完需要放音:

    system->createSound("music.waw", FMOD_DEFAULT, FMOD_DEFAULT ,&sound);
    FMOD_RESULT result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
    system->update();
    sound->release();
    

    如果您打算多次重复使用声音,您可以考虑只加载一次并保留它的内存。

    【讨论】:

      【解决方案2】:

      这里有一些避免内存泄漏的建议

      result = pitch_shift_DSP->release();// if you have DSP like me.
      ERRCHECK(result);
      result = sound->release();
      ERRCHECK(result);
      result = system->close();
      ERRCHECK(result);
      result = system->release();
      ERRCHECK(result);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多