簡體   English   中英

使用vector的push_back()時引發std :: bad_alloc

[英]std::bad_alloc thrown when vector's push_back() is used

在以下代碼片段中,我收到一條錯誤消息:拋出'std :: bad_alloc'what()實例之后調用終止:std :: bad_alloc中止(核心已轉儲)

這發生在push_back()指令中。 可能是什么原因? 該錯誤是在第一次迭代本身中看到的,因此我不認為這是因為程序已過度使用了內存。 我可能忽略了一些非常愚蠢的事情。 請告訴我!

for(i=0; i<numsegs; i++){
    for(j=0;j<rvm->number_segs; j++){
        if(segbases[i] == rvm->segment_list[j]->ext_data_seg){
            transaction->rvm = rvm;
            transaction->tid = trans_count++;
            transaction->number_regs = 0;
            transaction->number_segs++;
            rvm->segment_list[j]->modified = 1;
            temp_seg = rvm->segment_list[j];                           
            transaction->segment_list.push_back(temp_seg);
        }
    }

}

循環最初以numsegs = rvm-> number_segs = 1運行。

編輯:事務結構是:

struct Trans_t{
    int tid;
    rvm_t rvm;
    int number_segs;
    int number_regs;
    vector <segment*> segment_list;
    vector <region*> region_list;   
};
typedef struct Trans_t* trans_t;

主要問題似乎在注釋中說明:如果確實使用malloc(如OP注釋)分配了Trans_t類型的結構(不是POD),則整個程序格式錯誤。

由於從未運行過Trans_t :: segment_list <>的構造函數,因此嘗試將任何內容推入其中都會導致崩潰或異常。 在這里,傳遞給標准分配器的“值大小”參數很可能超過該分配器的max_size() (因為它本質上是垃圾),因此在接收到它作為參數時會拋出bad_alloc。

暫無
暫無

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

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