簡體   English   中英

c++ 向量中的 std::bad_alloc

[英]std::bad_alloc in a c++ vector

我正在將浮點處理的數據處理為標准向量,並且每 3 個值添加一個 0,因此我可以獲得 4 個值的幀。 向量的大小小於最大 data.max_size() = 1 073 741 823。向量的總大小為 data.size()=55 000 000。

問題是當我運行我的應用程序時,尤其是在將數據保存到新向量時,應用程序會自動停止並且我得到std::bad_alloc錯誤。

有人對這個問題有想法嗎? 我正在使用 QTcreator,該應用程序以 32 位運行,我從繼承的公共 class 獲取處理后的數據。 DATA_getAllMeasurments()[i]->DPacket.DATA_Packet是數據向量。

  void FileGenerate::GeneratePDOfile(uint8 i, std::string  path){

    std::vector <float>data;

    int size = DATA_getAllMeasurments()[i]->DPacket.DATA_Packet.size();
    int newsize= (size *4)/3; 
    unsigned int m =0;
    
    for (int k=0; k<newsize ; k++){
        if (k%4==0)
            data.push_back(0.0);
        else            
            data.push_back(DATA_getAllMeasurments()[i]->DPacket.DATA_Packet[m++]);              
        
    }    
    std::string path2 = path + "/Measurement" +std::to_string(i+1)+".pdo";
    std::ofstream myFile (path2, std::ios::out | std::ios::binary);
    myFile.write((char *)&(data[0]),data.size() *sizeof (float));
    myFile.close();
    data.clear();
    }

function std::vector::max_size()報告標准庫支持的最大大小。

它在編譯時進行評估,並且不報告您的程序可能正在運行的系統的運行時功能。

也就是說,您的系統可能沒有足夠的連續 memory 來分配所需的空間。 即使您的操作系統報告了足夠的“可用空間”, std::vector也被設計為需要連續空間。

通過不斷增長向量,您正在分割進程的尋址空間,並且在 32 位進程中是有限資源。

幸運的是,有一個簡單的解決方案 - 只需在進入for循環之前調用data.reserve (new size) 很有可能,代碼將起作用。

暫無
暫無

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

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