[英]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.