2017-01-20 10 views
0

Кто-то, пожалуйста, помогите с этой проблемой утечки памяти! В моей функции projectInsert() я создал указатель new, а после return я удалил указатель, используя delete. Но утечка памяти все еще существует. Что я делаю не так. Пожалуйста помоги!утечка памяти в функции C++, visual studio 2012, связанный список

struct HeliostatPointer { double x; double y; double z; double aa; bool Corner; double SB; double spillage; bool intersect; double lw; double lh; double xx; double yy; double distance; HeliostatPointer* next; RV SunRayVector; RV ReflectedRayVector; double incident; double COS; RV NormalVector; HeliostatPointer* next2; HeliostatPointer* next3; }; 

HeliostatPointer* projectInsert(double ax, double ay, double az) 
{ 
    HeliostatPointer *temp = new HeliostatPointer; 
    temp->x = ax; 
    temp->y = ay; 
    temp->z = az; 
    temp->intersect = false; 
    temp->Corner = true; 
    return temp; 
    delete temp->next, temp->next2, temp->next3, temp; 
} 
+0

Вы пытались поставить 'delete temp-> next, temp-> next2, temp-> next3, temp;' before' return temp; '? –

ответ

3

Вы не можете удалить после возвращения, вы должны удалить его до возвращения!

Ключевое слово возвращение заканчивает функцию, следовательно, удаления никогда не выполняется

+0

О, мой бог .. Я чувствую себя таким облегченным, и дам ха-ха! Большое спасибо! –

+0

Но если я удалю перед возвращением, то я не могу вернуться ... верно? –

+0

Вы правы! [См. Здесь, как это сделать] (http://stackoverflow.com/questions/12992925/c-correct-way-to-return-pointer-to-array-from-function) –

1

Вы бы долбить использовать зЬй :: shared_ptr как этот

#include <memory> 
struct Data 
{ 

}; 
std::shared_ptr<Data> Test() 
{ 
    Data* data = new Data(); 
    std::shared_ptr<Data> ptr(data); 
    return ptr; 
} 

PTR будет выпущен, когда конец вызова. и данные будут выпущены при освобождении всех контейнеров