簡體   English   中英

Bad_alloc問題

[英]Bad_alloc problem

我的程序拋出一個std :: bad_alloc。 調試之后,我發現它被拋出了代碼

curFinalBucket->points.push_back(p);

其中點是一個vector<PPointT> 在代碼行之前,將curFinalBucket初始化如下。

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

奇怪的是,如果我只是將上面的代碼放在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]);
}

它將引發有問題的異常。 有什么想法可能是關於什么的嗎? 提前致謝。

我認為問題是您正在使用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);

(FinalBucket*)malloc(sizeof(FinalBucket)); FinalBucket大小的對象分配內存,但實際上並沒有創建最終存儲桶。 您應該new FinalBucket()使用new FinalBucket()

另外,作為樣式的注釋,在PFinalBucket類的宏/ typedef之后隱藏指針會使您的代碼更難閱讀。 只需編寫FinalBucket *FinalBucket *清楚了。

您應該使用新的FinalBucket分配動態內存,而不是malloc。 新的運算符將調用FinalBucket的構造函數 ,在其中初始化了向量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM