Ric*_*ard 1 c++ memory memory-leaks exception
我的程序抛出一个std :: bad_alloc.调试之后,我发现它被抛入代码中
curFinalBucket->points.push_back(p);
Run Code Online (Sandbox Code Playgroud)
点是a vector<PPointT>
.在代码行之前,curFinalBucket
初始化如下.
PFinalBucket curFinalBucket;
curFinalBucket = (FinalBucket*)malloc(sizeof(FinalBucket));
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我简单地把上面的代码放进去main
,也不例外.但是,当我把它如下,
void mergeBucket(map<BucketT, vector<PPointT>, Comp> *pMap, IntT numFinalBuckets)
{
...
PFinalBucket curFinalBucket;
curFinalBucket = (FinalBucket*)malloc(sizeof(FinalBucket));
curFinalBucket->points.push_back(p);
}
int testLoadBalancedLSH(IntT num_fbuckets, RealT avgNumPossessedTerms, IntT np, IntT d, char* dataFile)
{
...
mergeBucket(&mapstore, num_fbuckets);
}
int main(int nargs, char **args) {
...
testLoadBalancedLSH(atoi(args[1]), 0.01 * atoi(args[2]), atoi(args[2]), atoi(args[3]), args[4]);
}
Run Code Online (Sandbox Code Playgroud)
它会抛出有问题的异常.任何想法这可能是什么?提前致谢.
我认为问题是你用malloc创建curFinalBucket.这不会调用构造函数,因此vector<PPointT>
当您尝试使用内部时,不会初始化内部.
我猜FinalBucket是这样的:
class FinalBucket{
public:
vector<PPointT> points;
}
Run Code Online (Sandbox Code Playgroud)
points
需要一个没有发生的初始化,因为没有调用FinalBucket构造函数,也没有调用vector<PPointT>
构造函数.
您只是分配内存,但您需要调用构造函数进行初始化.
解决这个问题的唯一方法是使用new来分配FinalBucket.
PFinalBucket curFinalBucket;
curFinalBucket = new FinalBucket();
curFinalBucket->points.push_back(p);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
726 次 |
最近记录: |