【问题标题】:Memory Leak in Loop - C++循环内存泄漏 - C++
【发布时间】:2015-10-26 17:08:41
【问题描述】:

我的程序正在泄漏。在低级代码中,我使用Julius 提供的所有工具来释放内存。但我想确定这是我的问题,而不是代码。那么这段代码自然会泄露吗? (循环中的多个识别,使用相同的指针)。

SREngineJulius *julius_pointer;
int iter = 10; //some number

    for(int i = 0; i <= iter; i++){

        julius_pointer= new SREngineJulius();
        julius_pointer->InitSREngine(jconf);
        julius_pointer->Callbacks();
        julius_pointer->DynamicAddCommands(palavras2,"|",0);
        buffering = julius_pointer->Audio_Buffering(audio_buffer, maxlen, 0,1);
        result = julius_pointer->NotifyCallbackLoop("nao_interessa_nada");
        julius_pointer->~SREngineJulius();
        delete julius_pointer;
}

【问题讨论】:

  • 你到底为什么要手动调用析构函数?
  • 不要调用析构函数,delete 会为你做这件事
  • 如果你只是在每次迭代中创建然后删除对象,你似乎根本不需要动态内存!
  • @Angew 调用将释放内存的例程。 Julius Core 中的例程。我应该在析构函数之外使用这个例程吗?
  • @carduh 从不手动调用析构函数。当您使用delete 时会调用它。如果您手动调用它,您只是要求出现双重释放或损坏错误。

标签: c++ memory-leaks


【解决方案1】:

您不需要动态分配引擎。只需将其用作局部变量:

int iter = 10; //some number

for(int i = 0; i <= iter; i++){

        SREngineJulius julius_engine;
        julius_engine.InitSREngine(jconf);
        julius_engine.Callbacks();
        julius_engine.DynamicAddCommands(palavras2,"|",0);
        buffering = julius_engine.Audio_Buffering(audio_buffer, maxlen, 0,1);
        result = julius_engine.NotifyCallbackLoop("nao_interessa_nada");

        // SREngineJulius destructor is called automatically when the variable julius_engine goes out of scope in each iteration

}

如果在这些更改之后仍然存在内存泄漏,则泄漏是在循环内调用的 SREngineJulius 方法之一内。

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2018-05-13
    相关资源
    最近更新 更多