【发布时间】:2014-12-05 01:42:29
【问题描述】:
我正在使用 c++ 在 Visual Studio 中编写代码。 我的测试说我有内存泄漏。我不明白为什么。
这是错误:
检测到内存泄漏! 倾倒对象 -> e:\gbm\inf1005c\td6\exercice1\exercice1.cpp(175) : {1417} 正常块在 0x0073C7C8,0 字节长。 数据:
非常感谢。
请注意,collection 是一个结构体,存在内存泄漏的行是这一行: nouvelleCollection.livres = new Livre*[nTitresPareils];
Collection retrouverLivresParNom(const wstring& titre, const Collection& collection) // Mettre les bons paramètres.
{ int nTitresPareils = 0;
// Retrouver les livres dans la collection dont le titre correspond à la recherche
for (int i = 0; i < collection.nLivres; i++){
bool trouve = (wcsstr(collection.livres[i]->titre, titre.c_str()) != nullptr);
if (trouve)
nTitresPareils ++;
}
// Allouer l'espace qui contiendra le tableau des livres trouvés
Collection nouvelleCollection;
nouvelleCollection.livres = new Livre*[nTitresPareils];
// Copier les pointeurs vers les livres trouvés
int compteur = 0;
for (int i = 0; i < collection.nLivres; i++){
bool trouve = (wcsstr(collection.livres[i]->titre, titre.c_str()) != nullptr);
if (trouve){
nouvelleCollection.livres[compteur] = collection.livres[i];
compteur++;
}
}
nouvelleCollection.nLivres = nTitresPareils;
nouvelleCollection.nLivresAlloues = nTitresPareils;
// Retourner le nombre de livres trouvés
return nouvelleCollection;
}
【问题讨论】:
-
规则一:有
new时,记得delete。零号规则:将new和delete封装到RAII 设施中。 -
你应该确保你的 Collection 类的析构函数调用
-
规则 -1(在规则 #0 之前):除非必要,否则不要使用动态内存分配变量(例如运行时的未知数量或太大而不能成为本地或自动存储变量)。
标签: c++ memory-leaks visual-studio-2013