Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内存泄漏,复制c+中的元素和指针列表+; 这是我的问题,基本上我正在研究C++中的图形和路径发现。由于内存不足,我面临一些崩溃。 我使用了一个检测泄漏内存的工具来帮助查找问题,它发生在我的copyList函数中: template<class T> PElement<T> * PElement<T>::copieListe(PElement<T> * original) { if (!original) { return NULL; } else { return new PElement<T>(new T(*original->v),copieListe(original->s)); } } 模板 PElement*PElement::复印机(PElement*原件) { 如果(!原件) { 返回NULL; } 其他的 { 返回新的PELENT(新的T(*原件->v),复制文件(原件->s)); } }_C++_Memory Leaks - Fatal编程技术网

内存泄漏,复制c+中的元素和指针列表+; 这是我的问题,基本上我正在研究C++中的图形和路径发现。由于内存不足,我面临一些崩溃。 我使用了一个检测泄漏内存的工具来帮助查找问题,它发生在我的copyList函数中: template<class T> PElement<T> * PElement<T>::copieListe(PElement<T> * original) { if (!original) { return NULL; } else { return new PElement<T>(new T(*original->v),copieListe(original->s)); } } 模板 PElement*PElement::复印机(PElement*原件) { 如果(!原件) { 返回NULL; } 其他的 { 返回新的PELENT(新的T(*原件->v),复制文件(原件->s)); } }

内存泄漏,复制c+中的元素和指针列表+; 这是我的问题,基本上我正在研究C++中的图形和路径发现。由于内存不足,我面临一些崩溃。 我使用了一个检测泄漏内存的工具来帮助查找问题,它发生在我的copyList函数中: template<class T> PElement<T> * PElement<T>::copieListe(PElement<T> * original) { if (!original) { return NULL; } else { return new PElement<T>(new T(*original->v),copieListe(original->s)); } } 模板 PElement*PElement::复印机(PElement*原件) { 如果(!原件) { 返回NULL; } 其他的 { 返回新的PELENT(新的T(*原件->v),复制文件(原件->s)); } },c++,memory-leaks,C++,Memory Leaks,以下是PElement类: template <class T> class PElement { public : T * v; PElement<T> * s; } 模板 类毛皮 { 公众: T*v; PElement*s; } 在copyList中调用的构造函数: template <class T> PElement<T>::PElement( T * v, PElement<T> * s ):v(v),s(s){} 模板

以下是PElement类:

template <class T>
class PElement
{
public :
T * v;
PElement<T> * s;
}
模板
类毛皮
{
公众:
T*v;
PElement*s;
}
在copyList中调用的构造函数:

template <class T>
PElement<T>::PElement( T * v, PElement<T> * s ):v(v),s(s){}
模板
PElement::PElement(T*v,PElement*s):v(v),s(s){
我正在使用这个函数一千次。。。所以根本不需要内存泄漏。我的图有一个EGDE和顶点的列表,所以你知道这是关于什么的:

template <class S, class T>
class Graphe
{
protected:
int prochaineClef;
public:

PElement< Sommet<T> > * lSommets; // liste de sommets (vertices)
PElement< Arete<S,T> > * lAretes; // liste d'arêtes (edges)
}
模板
类图
{
受保护的:
int PROCHAINELEF;
公众:
PElement*lSommets;//列出sommets(顶点)
PElement*lAretes;//列表(边缘)
}

我知道这不是最简单/最好的方法,但这不是我的选择,我只是想问您是否知道如何限制内存泄漏。

您正在复制列表函数的返回语句中分配内存


为了避免内存泄漏,无论谁调用copylist,都需要在使用完copylist后删除您从copylist返回的项。

使用智能指针和标准库容器是防止泄漏的好方法。出于对所有神圣事物的热爱,如果您要共享指针列表,请使用某种形式的智能指针,不是一个原始的指针。我没有选择关于PElement的东西。我希望我能把所有东西都存储在向量中。你说的智能指针是什么意思?编辑:我在这里找到了一些关于智能指针的信息:。如果你在C++ 11或更新版上,我就不能使用它们。如果没有,您可以使用boost。这两个都是我看到的。。。但是这里有点棘手,没有办法做得更好吗?用数组PElement[1000]代替PElement*。您表示您使用了1000次。您是否确实知道需要复制的数据的大小?也许你可以分配数组,把一个常量放在像“const in array_SIZE=1000”这样的地方,然后无论谁调用你,都可以遍历所有1000个元素并在循环中删除它们。另外,您可以复制循环中的所有元素。另一种方法是创建您自己的容器类,该容器类具有自己的析构函数,该析构函数销毁其中的所有元素,并可以生成自身的副本,而该副本又可以被销毁。。对不起,我已经用C++编程了20年,大约10年前。C#是我目前选择的语言。。。