为什么我的std :: vector.push_back抛出bad_alloc异常

时间:2016-07-26 15:14:07

标签: c++

我有一个简单的循环,它读入文本文件并将其写入字符数组。这是函数

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变量的问题。我已经多次在同一个程序中完成了类似的方法,并且从未遇到过像这样的问题。任何见解都会受到欢迎!

2 个答案:

答案 0 :(得分:5)

每次拨打$ env时,你都会泄漏5万个内存,所以大概你的内存不足了。

答案 1 :(得分:-2)

我不确定为什么错误没有在程序的早期抛出,但错误源于缓冲区数组太小。将尺寸加倍,错误就消失了。