我有一个简单的循环,它读入文本文件并将其写入字符数组。这是函数
void podBase::parseMailingAddyImacroOutput(string a)
{
fstream inP(a, fstream::in);
char *buffer = new char[50000];
int sz_data = 0;
int nComma = 0;
string temp = "";
string *ptr_temp = &temp;
char z = ' ';
bool check[3] = { false,false,false };
_MailingAddy.resize(vectorEntries);
_CityStateZip.resize(vectorEntries);
while (inP.get(buffer[sz_data]))
sz_data++;
//inP.close();
//3 Commmas
//First comma: Owner Name
//Second Comma: Owner mailing street & Num
//Third Comma: City, State, Zipcode
for (int i = 0; i < sz_data; i++)
{
z = buffer[i];
if (!isComma(z))
temp += z;
if (isComma(z))
nComma++;
if (nComma == 1 && !check[0])
{
temp.clear();
check[0] = true;
}
if (nComma == 2 && !check[1])
{
_MailingAddy.push_back((temp));
temp.clear();
check[1] = true;
}
if (nComma == 3 && !check[2])
{
_CityStateZip.push_back(temp);
temp.clear();
check[0] = false;
check[1] = false;
check[2] = false;
nComma = 0;
}
}
}
执行时,程序在以下行崩溃:
if (nComma == 2 && !check[1])
{
_MailingAddy.push_back((temp));
temp.clear();
check[1] = true;
}
尝试执行“push_back” 出于“bad_alloc”的原因。无论我尝试将push_back插入到向量中,我都会收到此错误 - 因此我认为它不是std :: string temp变量的问题。我已经多次在同一个程序中完成了类似的方法,并且从未遇到过像这样的问题。任何见解都会受到欢迎!
答案 0 :(得分:5)
每次拨打$ env
时,你都会泄漏5万个内存,所以大概你的内存不足了。
答案 1 :(得分:-2)
我不确定为什么错误没有在程序的早期抛出,但错误源于缓冲区数组太小。将尺寸加倍,错误就消失了。