gpt4 book ai didi

c++ - Bad_alloc 问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:59 25 4
gpt4 key购买 nike

我的程序抛出一个 std::bad_alloc。调试后发现是代码中抛出的

curFinalBucket->points.push_back(p);

其中点是一个 vector<PPointT> .在代码行之前,curFinalBucket初始化如下。

PFinalBucket curFinalBucket;
curFinalBucket = (FinalBucket*)malloc(sizeof(FinalBucket));

奇怪的是,如果我简单地将上面的代码放在 main 中, 没有异常(exception)。但是当我这样说时,

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]);
}

它将抛出有问题的异常。有什么想法吗?提前致谢。

最佳答案

我认为问题在于您正在使用 malloc 创建 curFinalBucket。这不会调用构造函数,因此内部 vector<PPointT>当您尝试使用它时未初始化。

我猜 FinalBucket 是这样的:

 class FinalBucket{
public:
vector<PPointT> points;
}

points需要未发生的初始化,因为未调用 FinalBucket 构造函数并且 vector<PPointT>也没有调用构造函数。

您只是在分配内存,但您需要调用构造函数来进行初始化。

解决此问题的唯一方法是使用new 分配FinalBucket。

PFinalBucket curFinalBucket;
curFinalBucket = new FinalBucket();
curFinalBucket->points.push_back(p);

关于c++ - Bad_alloc 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com