c++ - How can I properly release a ID3D11ShaderResourceView** to avoid memory leaks? -


i have private member of class.

id3d11shaderresourceview** texture_pool; 

i set null in class constructor this:

texture_pool = null; 

then initialize in class initialization:

texture_pool = new id3d11shaderresourceview*[texture_count]; (int n = 0; n < texture_count; n++) texture_pool[n] = null; 

and in class destructor release this:

for (int n = 0; n < texture_count; n++) safe_release(texture_pool[n]); safe_delete_array(texture_pool); 

but program crashes when exit , debbuger point @ line cause of crash:

for (int n = 0; n < texture_count; n++) safe_release(texture_pool[n]); 

if remove line works smooth, i'm worried possible memory leaks if dont release array.

so, can remove line , cleaned porperly?

these defined lines release , delete instructions:

#define safe_release(p) { if ( (p) ) { (p)->release(); (p) = 0; } } #define safe_delete(a) if( (a) != null ) delete (a); (a) = null; #define safe_delete_array(a) if( (a) != null ) delete[] (a); (a) = null; 

you have shown this:

#define safe_release(p) { if ( (p) ) { (p)->release(); (p) = 0; } } #define safe_delete(a) if( (a) != null ) delete (a); (a) = null; #define safe_delete_array(a) if( (a) != null ) delete[] (a); (a) = null; 

try instead:

#ifndef safe_release     #define safe_release(p) { if(p) { (p)->release(); (p) = null; } } #endif  #ifndef safe_delete      #define safe_delete(p) { if(p) { delete (p); (p) = nullptr; } } #endif  #ifndef safe_delete_array     #define safe_delete_array(p) { if(p) { delete[](p); (a) = nullptr; } } #endif 

when working macros need careful uses of "()" & "{}".

you not need (p) != nullptr check since when have if(p) next statement if check returns true indicating pointer valid , not null.

you missing #ifndef , #endif around macro definitions.

if compiler not support nullptr can use null instead, nullptr cleaner , readable.


Comments

Popular posts from this blog

html - Outlook 2010 Anchor (url/address/link) -

javascript - Why does running this loop 9 times take 100x longer than running it 8 times? -

Getting gateway time-out Rails app with Nginx + Puma running on Digital Ocean -