我正在使用C++在Visual Studio中编写代码。 我的测试说我有内存泄漏。我不明白为什么。C++代码中的内存泄漏
这里是错误:
检测到内存泄漏! 转储对象 - > e:\ gbm \ inf1005c \ td6 \ exercice1 \ exercice1.cpp(175):{1417}位于0x0073C7C8的常规块,0字节长。 Data:<>
非常感谢。
请注意,colletion是一个结构,并且内存泄漏的行是这一个: 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;
}
规则1:当有一个'new'时,记得'delete'。规则编号为ZERO:将“新”和“删除”封装在RAII设施中。 – 2014-12-05 01:50:53
您应确保Collection类的析构函数调用 – 2014-12-05 01:53:50
规则-1(在规则#0之前出现):除非必要,否则不要使用动态内存分配变量(例如运行时的未知数量或过大的本地变量或自动存储变量)。 – 2014-12-05 02:05:27