【发布时间】:2015-02-14 01:13:29
【问题描述】:
我 100% 肯定我在从堆中删除内存丢失之前涵盖了所有方面,但 valgrind 似乎不同意。任何有关在以下代码中查找泄漏的帮助将不胜感激!我似乎无法弄清楚是什么原因造成的
Card * S = new Card[subsetSize];
Card * M = nullptr;
int subsetPrice = 0, subsetProfit = 0;
for(int i = 0; i < subsetSize; i++){
S[i] = problemCards[cardIndexesToAdd[i]];
subsetPrice += S[i].getPrice();
subsetProfit += S[i].getProfit();
}
// Evaluate the subset's cost and profit
if(subsetPrice <= maxToSpend){
if(subsetProfit > maxProfit){
maxProfit = subsetProfit;
if(M != nullptr)
delete[] M;
M = S;
S = nullptr;
mSize = subsetSize;
}
}
else{
if(S != nullptr){
delete[] S;
S = nullptr;
}
}
// output code for M
if(M != nullptr)
delete[] M;
【问题讨论】:
-
所以你是 100% 肯定的......而且错了? o.O
-
@LightnessRacesinOrbit 是的,它发生了。感谢您难以置信的不必要的反对。
-
@Mr.Smith:实际上是这样,如果它可以诱使 OP 调整这种行为。那么他或她将来会因为错误的假设而犯更少的错误。看大局。
-
@LightnessRacesinOrbit 添加对 nullptr 的检查只是习惯
-
投下必要的反对票。
标签: c++ pointers memory-leaks nullptr