为什么valgrind使用GLUT和PORTAUDIO报告我的内存肯定丢失了12或24个字节

问题描述 投票:0回答:1

你好社区,我在尝试解决很多天时遇到了麻烦。我用portaudio编写了一个代码,并用valgrind对其进行了测试。结果,我“肯定丢失了0个字节”。但是当我将其与glut(freeglut)库混合以包含图形时,我却“丢失了24个字节”。在下面的代码中,我只是添加了glutCreateWindow(“ OpenGL”),然后在valgrind报告中得到了泄漏内存。我正在使用glew,freeglut,portaudio,sndfile库。有人知道这里发生了什么吗?非常感谢

#include "util.h"
#include "sound.h"
#include <unistd.h>

/*Funcion main para creacion de hilos de reproduccion*/
int main(int argc, char* args[]){
    sound::loadStream("../pacman.wav");// this function do Pa_Initiliaze()/Pa_OpenDefaultStream()/ 
                                       //Pa_StartStream()/
    sound::loadStream("../ya_te.wav");
     glutInit( &argc, args );
    //Create OpenGL 2.1 context
    glutInitContextVersion( 2, 1 );
    //Create Double Buffered and RGBA Window
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH );
    glutInitWindowSize( 1920, 1080 ); //size of window
    glutCreateWindow( "OpenGL" ); // leak memory start at this line
    sound::changeState(0,PLAY);  //this fucntion change pacman.wav state to PLAY in portaudio 
                                 //callback
    sound::changeState(1,PLAY); // this function change ya_te.wav state to PLAY in portaudio 
                                //callback
    sleep(1); // sleep for 1 second
    sound::soundTerminate(); // this function do Pa_closeStream , Pa_terminate();
    glutDestroyWindow(glutGetWindow());
    return 0;
}
c++ opengl valgrind freeglut portaudio
1个回答
0
投票

您不是'跟踪'在您对glutCreateWindow的调用中创建的窗口,这意味着(如Valgrind所见,您永远无法正确释放该窗口使用的内存。

您应该存储调用的返回值,如下所示:

int winID = glutCreateWindow( "OpenGL" );

然后在后续调用中使用保存的窗口标识符来销毁它:

glutDestroyWindow(winID);

注意:即使您使用glutGetWindow()将(很可能)返回相同的值,但Valgrind不知道(或不知道)。

© www.soinside.com 2019 - 2024. All rights reserved.