У меня это как частный член класса.Как я могу правильно освободить ID3D11ShaderResourceView **, чтобы избежать утечек памяти?
ID3D11ShaderResourceView** texture_pool;
Я поставил его в NULL в конструкторе класса, как это:
texture_pool = NULL;
Тогда я инициализировать его, как это в инициализации класса:
texture_pool = new ID3D11ShaderResourceView*[texture_count];
for (int n = 0; n < texture_count; n++) texture_pool[n] = NULL;
А в классе деструктор I отпустите его следующим образом:
for (int n = 0; n < texture_count; n++) SAFE_RELEASE(texture_pool[n]);
SAFE_DELETE_ARRAY(texture_pool);
Но иногда моя программа падает, когда я выйти из нее и точки debbuger на этой линии в качестве причины аварии:
for (int n = 0; n < texture_count; n++) SAFE_RELEASE(texture_pool[n]);
Если удалить эту строку все работает гладко, но я беспокоюсь о возможных утечках памяти, если Я не выпускаю массив.
Итак, могу ли я просто удалить эту линию, и все будет очищено porperly?
Эти являются определенные линии для выпуска и удаления инструкции:
#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;
Вы пытались использовать ваш отладчик для входа в код, чтобы увидеть, где он находится в цикле вашего деструктора? Возможно, ваша реализация написана правильно, но вы можете попытаться выпустить то, что недействительно во время вызова деструктора. –
Я также заметил что-то о ваших макросах, вы можете обратиться к приведенному ниже ответу, чтобы узнать, устраняет ли это вашу проблему. –