Shehab Badawy
Shehab Badawy

Reputation: 11

what is causing the memory leaks?

i'm making a game called square eater where i have a square which the user can move around by using the keyboard arrows and quit the game by pressing 'q'. now i made sure that i didn't allocate any resource manually so memory should be cleaned automatically. I've attached the output of valgrind at the end. here is my code

#ifdef __APPLE__
#include<GLUT/glut.h>
#else
#include<GL/glut.h>
#endif
#include<GL/freeglut.h>
#include<string.h>
#include<string>
#include<iostream>
#include<vector>
#include <cstdlib>
#include<time.h>
#include<array>
typedef struct point
{
   float x;
   float y;
}point;
typedef struct color
{
   float r;
   float g;
   float b;
}color;


int number_of_segments = 200;

float logX = 200;
float logY = 200;

int PhyWidth = 1000;
int PhyHeight = 1000;

int windowPosX = 500;
int windowPosY = 500;

float centerX = logX / 2;
float centerY = logY / 2;
int alphaX = 0;
int alphaY = 0;


typedef unsigned char u8;

class square
{
    private:

        std::array<point, 4> pts;
        float width;
        float height;
        bool  filled;
        float max_x;
        float min_x;
        float max_y;
        float min_y;
        int id;
        bool eaten = false;
        color colour = {1.0, 1.0, 1.0};
        bool main;
    public:
        square(point pt, int width, int height, bool filled, bool main)
        {
            this->width = width;
            this->height = height;
            this->filled = filled;
            this->main = main;
            float half_width = width/2;
            float half_height = height/2;
            min_x = pt.x - half_width;
            max_x = pt.x + half_width;
            min_y = pt.y - half_height;
            max_y = pt.y + half_height;
            this->pts[0] = {min_x, min_y};
            this->pts[1] = {max_x, min_y};
            this->pts[2] = {max_x, max_y};
            this->pts[3] = {min_x, max_y};
        }
        square(point pt, int width, int height, bool main, color colour, int id)
        {
            this->id = id;
            this->width = width;
            this->height = height;
            this->main = main;
            this->colour = colour;
            float half_width = width/2;
            float half_height = height/2;
            min_x = pt.x - half_width;
            max_x = pt.x + half_width;
            min_y = pt.y - half_height;
            max_y = pt.y + half_height;
            this->pts[0] = {min_x, min_y};
            this->pts[1] = {max_x, min_y};
            this->pts[2] = {max_x, max_y};
            this->pts[3] = {min_x, max_y};
        }

        std::array<point, 4> get_pts()
        {
            return this->pts;
        }
        void set_eaten()
        {
            this->eaten = true;
        }
        bool get_eaten()
        {
            return eaten;
        }
        void draw()
        {
            int alphaX_copy = 0;
            int alphaY_copy = 0;
            if(main)
            {
                alphaX_copy = alphaX;
                alphaY_copy = alphaY;
            }
            glColor4f(colour.r, colour.g, colour.b, 1);
            glBegin(GL_POLYGON);
                glVertex2f(this->pts[0].x + alphaX_copy, this->pts[0].y + alphaY_copy);
                glVertex2f(this->pts[1].x + alphaX_copy, this->pts[1].y + alphaY_copy);
                glVertex2f(this->pts[2].x + alphaX_copy, this->pts[2].y + alphaY_copy);
                glVertex2f(this->pts[3].x + alphaX_copy, this->pts[3].y + alphaY_copy);
            glEnd();
        }
        static bool intersected_squares(square& big_square, square& small_square)
        {
            for (size_t i = 0; i < 4; i++)
            {
                if( small_square.pts[i].x > (big_square.min_x + alphaX) && small_square.pts[i].x < (big_square.max_x + alphaX))
                {
                    // means in the range of x
                    if(small_square.pts[i].y > (big_square.min_y + alphaY) && small_square.pts[i].y < (big_square.max_y + alphaY))
                    {
                        // std::cout<<"Bingo!";
                        return true;
                    }

                }
            }
            return false;
        }
};


std::string score = "0";

square big_square({centerX,centerY}, 20, 20, true, {1.0, 0, 0}, 1);
std::vector<square> little_squares;

void display(void);
void init(void);
void keyboard(u8 key, int x, int y);
void special_keyboard(int key, int x, int y);


void draw_text(std::string str, point pt);


int main(int argc, char** argv)
{
    float r,g,b;
    int x,y;
    srand(time(0));
    for (size_t i = 0; i < 9; i++)
    {
        r = std::rand() % 256;
        g = std::rand() % 256;
        b = std::rand() % 256;
        r /= 255.0;
        g /= 255.0;
        b /= 255.0;
        x = std::rand() % 80;
        y = std::rand() % 80;
        point p = {x,y};
        color colour = {r,g,b};
        little_squares.emplace_back(p, 6, 6, false, colour, i+2);

    }


    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_CONTINUE_EXECUTION);
    glutInitWindowSize(PhyWidth, PhyHeight);
    glutInitWindowPosition(windowPosX,windowPosY);
    int window = glutCreateWindow("Shehab");
    init();
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutSpecialFunc(special_keyboard);
    glutMainLoop();
    std::cout<<"out\n";
    glutExit();

    return 0;
}

void display(void)
{

    glClear(GL_COLOR_BUFFER_BIT);

    big_square.draw();
    for(int i = 0; i < little_squares.size(); i++)
    {
        if(little_squares[i].get_eaten())
        {
            continue;
        }
        else if(square::intersected_squares(big_square, little_squares[i]))
        {
            little_squares[i].set_eaten();
            score[0]++;
            continue;
        }
        little_squares[i].draw();
    }
    draw_text("score is "+  score, {10 ,190});
    glutSwapBuffers();
    glFlush();
}

void init(void)
{

    glClearColor(0.0, 0, 1.0, 1);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0, logX, 0, logY);
}



void draw_text(std::string str, point pt)
{
   glRasterPos2d(pt.x, pt.y);
   for (int i=0;i<str.size();i++)
    glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18,str[i]);
}


void special_keyboard(int key, int x, int y)
{
    if(key == GLUT_KEY_UP)
    {
        alphaY += 5;
    }
    else if(key == GLUT_KEY_DOWN)
    {
        alphaY -= 5;
    }
    else if(key == GLUT_KEY_RIGHT)
    {
        alphaX += 5;
    }
    else if(key == GLUT_KEY_LEFT)
    {
        alphaX -= 5;
    }

    glutPostRedisplay();
}

void keyboard(u8 key, int x, int y)
{
    if(key == 'q')
    {
        glutLeaveMainLoop();
    }
}

here is the output of valgrind

==27343== Memcheck, a memory error detector
==27343== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==27343== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==27343== Command: ./snake
==27343== 
==27343== Warning: noted but unhandled ioctl 0x644f with no size/direction hints.
==27343==    This could cause spurious value errors to appear.
==27343==    See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper.
out
==27343== 
==27343== HEAP SUMMARY:
==27343==     in use at exit: 58,665 bytes in 522 blocks
==27343==   total heap usage: 15,762 allocs, 15,240 frees, 871,820,047 bytes allocated
==27343== 
==27343== 0 bytes in 2 blocks are definitely lost in loss record 1 of 128
==27343==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0x4005A22: malloc (rtld-malloc.h:56)
==27343==    by 0x4005A22: _dl_find_object_update (dl-find_object.c:791)
==27343==    by 0x400ECCF: dl_open_worker_begin (dl-open.c:735)
==27343==    by 0x4D67A97: _dl_catch_exception (dl-error-skeleton.c:208)
==27343==    by 0x400DF99: dl_open_worker (dl-open.c:782)
==27343==    by 0x4D67A97: _dl_catch_exception (dl-error-skeleton.c:208)
==27343==    by 0x400E34D: _dl_open (dl-open.c:883)
==27343==    by 0x4C8363B: dlopen_doit (dlopen.c:56)
==27343==    by 0x4D67A97: _dl_catch_exception (dl-error-skeleton.c:208)
==27343==    by 0x4D67B62: _dl_catch_error (dl-error-skeleton.c:227)
==27343==    by 0x4C8312D: _dlerror_run (dlerror.c:138)
==27343==    by 0x4C836C7: dlopen_implementation (dlopen.c:71)
==27343==    by 0x4C836C7: dlopen@@GLIBC_2.34 (dlopen.c:81)
==27343== 
==27343== 8 bytes in 1 blocks are definitely lost in loss record 10 of 128
==27343==    at 0x48487A9: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0xBD63379: ???
==27343==    by 0xBD4D56F: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD505B1: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD50913: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0x621481E: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227222: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227817: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x670AFDC: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61B24B3: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61BA4FA: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x5646143: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343== 
==27343== 29 bytes in 1 blocks are definitely lost in loss record 24 of 128
==27343==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0xBD6A8F3: ???
==27343==    by 0xBD50CE7: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0x621481E: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227222: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227817: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x670AFDC: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61B24B3: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61BA4FA: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x5646143: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343==    by 0x5646287: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343==    by 0x5670F07: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343== 
==27343== 29 bytes in 1 blocks are definitely lost in loss record 25 of 128
==27343==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0xBD6A8F3: ???
==27343==    by 0xBD50CAA: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0x621481E: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227222: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227817: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x670AFDC: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61B24B3: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61BA4FA: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x5646143: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343==    by 0x5646287: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343==    by 0x5670F07: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343== 
==27343== 38 bytes in 1 blocks are definitely lost in loss record 29 of 128
==27343==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0xBD6A8F3: ???
==27343==    by 0xBD50AD9: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0x621481E: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227222: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227817: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x670AFDC: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61B24B3: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61BA4FA: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x5646143: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343==    by 0x5646287: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343==    by 0x5670F07: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343== 
==27343== 40 bytes in 1 blocks are definitely lost in loss record 41 of 128
==27343==    at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0xBD6AAD7: ???
==27343==    by 0xBD71706: ???
==27343==    by 0xBD7176F: ???
==27343==    by 0xBD717DC: ???
==27343==    by 0xBD488F8: drmGetContextTag (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD4F46B: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD509D6: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0x621481E: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227222: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227817: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x670AFDC: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343== 
==27343== 96 (24 direct, 72 indirect) bytes in 1 blocks are definitely lost in loss record 81 of 128
==27343==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0xBD71F3D: ???
==27343==    by 0xBD5DE35: ???
==27343==    by 0xBD62B0E: ???
==27343==    by 0xBD503D2: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD5065B: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD50913: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0x621481E: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227222: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227817: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x670AFDC: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61B24B3: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343== 
==27343== 152 (112 direct, 40 indirect) bytes in 1 blocks are definitely lost in loss record 84 of 128
==27343==    at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0xBD69E2F: ???
==27343==    by 0xBD4F66F: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD509D6: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0x621481E: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227222: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227817: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x670AFDC: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61B24B3: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61BA4FA: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x5646143: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343==    by 0x5646287: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343== 
==27343== 520 bytes in 13 blocks are definitely lost in loss record 111 of 128
==27343==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0xBD6E045: ???
==27343==    by 0xBD626FC: ???
==27343==    by 0xBD50804: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0x621481E: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227222: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227817: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x670AFDC: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61B24B3: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61BA4FA: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x5646143: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343==    by 0x5646287: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343== 
==27343== 567 (184 direct, 383 indirect) bytes in 1 blocks are definitely lost in loss record 112 of 128
==27343==    at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0xBD5D16F: ???
==27343==    by 0xBD5E4DF: ???
==27343==    by 0xBD4FFC9: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD503A0: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD5065B: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD50913: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0x621481E: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227222: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227817: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x670AFDC: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61B24B3: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343== 
==27343== 10,680 (48 direct, 10,632 indirect) bytes in 1 blocks are definitely lost in loss record 128 of 128
==27343==    at 0x484DA83: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==27343==    by 0xBD4D9C9: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD4F4CF: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0xBD509D6: ??? (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==27343==    by 0x621481E: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227222: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x6227817: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x670AFDC: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61B24B3: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x61BA4FA: ??? (in /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.550.67)
==27343==    by 0x5646143: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343==    by 0x5646287: ??? (in /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.550.67)
==27343== 
==27343== LEAK SUMMARY:
==27343==    definitely lost: 1,032 bytes in 24 blocks
==27343==    indirectly lost: 11,127 bytes in 59 blocks
==27343==      possibly lost: 0 bytes in 0 blocks
==27343==    still reachable: 46,506 bytes in 439 blocks
==27343==         suppressed: 0 bytes in 0 blocks
==27343== Reachable blocks (those to which a pointer was found) are not shown.
==27343== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==27343== 
==27343== For lists of detected and suppressed errors, rerun with: -s
==27343== ERROR SUMMARY: 11 errors from 11 contexts (suppressed: 0 from 0)

i tried to see if how i'm terminating the program would make a different result. but it didn't. I tried using exit(0) when 'q' is pressed, and by pressing the close button in the window itself.

Upvotes: 0

Views: 141

Answers (0)

Related Questions