]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Fix memory freed sc/gl_viewer_freed_memory_fix 14/head
authorCHEMIN Sebastien <sc236498@is245491.intra.cea.fr>
Mon, 4 Dec 2023 08:00:30 +0000 (09:00 +0100)
committerCHEMIN Sebastien <sc236498@is245491.intra.cea.fr>
Mon, 4 Dec 2023 08:00:30 +0000 (09:00 +0100)
src/GLViewer/GLViewer_BaseObjects.cxx
src/GLViewer/GLViewer_BaseObjects.h
src/GLViewer/GLViewer_Context.cxx
src/GLViewer/GLViewer_Object.cxx
src/GLViewer/GLViewer_Viewer2d.cxx

index 17a8a983cbef2931894e1ce4158a77d2d7675d11..ee04f2c1012a4b32d76c4f9a019908cc878e697b 100644 (file)
@@ -59,10 +59,11 @@ GLViewer_MarkerSet::GLViewer_MarkerSet( int number, float size, const QString& t
 */
 GLViewer_MarkerSet::~GLViewer_MarkerSet()
 {
-    if ( myXCoord )
-        delete[] myXCoord;
-    if ( myYCoord )
-        delete[] myYCoord;
+  delete[] myXCoord;
+  delete[] myYCoord;
+
+  myXCoord = nullptr;
+  myYCoord = nullptr;
 }
 
 /*!
@@ -590,6 +591,9 @@ GLViewer_Rect* GLViewer_MarkerSet::getUpdateRect()
 */
 void GLViewer_MarkerSet::setXCoord( GLfloat* xCoord, int size )
 {
+  delete[] myXCoord;
+  myXCoord = nullptr;
+
   myXCoord = new GLfloat[ size ];
   for( int i = 0; i < size; i++ )
      myXCoord[i] = xCoord[i];
@@ -602,6 +606,9 @@ void GLViewer_MarkerSet::setXCoord( GLfloat* xCoord, int size )
 */
 void GLViewer_MarkerSet::setYCoord( GLfloat* yCoord, int size )
 {
+  delete[] myYCoord;
+  myYCoord = nullptr;
+
   myYCoord = new GLfloat[ size ];
   for( int i = 0; i < size; i++ )
      myYCoord[i] = yCoord[i];
@@ -840,10 +847,11 @@ GLViewer_Polyline::GLViewer_Polyline( int number, float /*size*/, const QString&
 */
 GLViewer_Polyline::~GLViewer_Polyline()
 {
-  if ( myXCoord )
-    delete[] myXCoord;
-  if ( myYCoord )
-    delete[] myYCoord;
+  delete[] myXCoord;
+  delete[] myYCoord;
+
+  myXCoord = nullptr;
+  myYCoord = nullptr;
 }
 
 /*!
@@ -993,7 +1001,9 @@ GLViewer_Rect* GLViewer_Polyline::getUpdateRect()
 GLViewer_Drawer* GLViewer_Polyline::createDrawer()
 {
 //  cout << "GLViewer_MarkerSet::createDrawer" << endl;
-    return myDrawer = new GLViewer_PolylineDrawer();
+  delete myDrawer;
+  myDrawer = nullptr;
+  return myDrawer = new GLViewer_PolylineDrawer();
 }
 
 /*!
@@ -1177,6 +1187,9 @@ GLboolean GLViewer_Polyline::unselect()
 */
 void GLViewer_Polyline::setXCoord( GLfloat* xCoord, int size )
 {
+  delete[] myXCoord;
+  myXCoord = nullptr;
+
   myXCoord = new GLfloat[ size ];
   for( int i = 0; i < size; i++ )
      myXCoord[i] = xCoord[i];
@@ -1189,6 +1202,9 @@ void GLViewer_Polyline::setXCoord( GLfloat* xCoord, int size )
 */
 void GLViewer_Polyline::setYCoord( GLfloat* yCoord, int size )
 {
+  delete[] myYCoord;
+  myYCoord = nullptr;
+
   myYCoord = new GLfloat[ size ];
   for( int i = 0; i < size; i++ )
      myYCoord[i] = yCoord[i];
index fe4f6c88688e1c414fdb9e756f5f47df9a96a6cd..609db9accd8d86a7ae2fd2c850abc1611f01745d 100644 (file)
@@ -127,7 +127,7 @@ class GLVIEWER_API GLViewer_Polyline: public GLViewer_Object
 {
 public:
   GLViewer_Polyline( int number = 1, float size = 5.0, const QString& toolTip = "GLPolyline" );
- ~GLViewer_Polyline();
virtual ~GLViewer_Polyline();
   
   // redefined  methods
   virtual void            compute();
index b3e5c4705575436892cb6e00b67668d33c4bee2a..6c25630a3ddf0cb0751131605d13d32ad47feed6 100644 (file)
@@ -69,9 +69,13 @@ GLViewer_Context::GLViewer_Context( GLViewer_Viewer2d* v ) :
 */
 GLViewer_Context::~GLViewer_Context()
 {
-    myActiveObjects.clear();
-    myInactiveObjects.clear();
-    mySelectedObjects.clear();
+  qDeleteAll(myActiveObjects);
+  myActiveObjects.clear();
+
+  qDeleteAll(myInactiveObjects);
+  myInactiveObjects.clear();
+
+  mySelectedObjects.clear();
 }
 
 /*!
@@ -115,6 +119,8 @@ int GLViewer_Context::MoveTo( int xi, int yi, bool byCircle )
             object->highlight( x, y, myTolerance, GL_FALSE );
             isHigh = object->isHighlighted();
         }
+        delete rect;
+        rect = nullptr;
 
         if( isHigh )
         {
index 748561b566ae05e4b2266f541663a888b65408df..1bd868e6579a53ce0c9e5c0f6566e77773844901 100644 (file)
@@ -42,8 +42,8 @@ GLViewer_Object::GLViewer_Object()
   myIsHigh = GL_FALSE;
   myIsSel = GL_FALSE;
   
-  myRect = new GLViewer_Rect(); 
-  myUpdateRect = new GLViewer_Rect();;  
+  myRect = new GLViewer_Rect(); 
+  myUpdateRect = new GLViewer_Rect();  
   myGLText = new GLViewer_Text( 0, 0, 0, QColor(0,0,0) );
 
   myAspectLine = new GLViewer_AspectLine();
@@ -64,17 +64,20 @@ GLViewer_Object::GLViewer_Object()
 */
 GLViewer_Object::~GLViewer_Object()
 {
-  if( myRect )
-    delete myRect;
+  delete myRect;
+  myRect = nullptr;
 
-  if( myUpdateRect )
-    delete myUpdateRect;
+  delete myUpdateRect;
+  myUpdateRect = nullptr;
 
-  if( myGLText )
-    delete myGLText;
+  delete myGLText;
+  myGLText = nullptr;
 
-  if( myAspectLine )
-    delete myAspectLine;
+  delete myAspectLine;
+  myAspectLine = nullptr;
+
+  delete myOwner;
+  myOwner = nullptr;
 }
 
 /*!
index 11028eb0ac45e63e1c748e76a020b6084a934969..ad1164e3e75eeb7ec894d9603a27b107cd77ed4d 100644 (file)
@@ -69,6 +69,13 @@ GLViewer_Viewer2d::~GLViewer_Viewer2d()
 {    
     //myGLSketcher = 0;
     //delete myGLSketcher;
+
+  qDeleteAll(myDrawers);
+  myDrawers.clear();
+
+  delete myGLContext;
+  myGLContext = nullptr;
+
   GLViewer_TexFont::clearTextBases();
 }