【发布时间】:2013-07-03 19:32:17
【问题描述】:
在以下行:std::ifstream fileOpen(file.c_str()); 在下面的函数中程序崩溃并给我这个错误:
此应用程序已请求运行时以不寻常的方式终止它。 请联系应用程序的支持团队了解更多信息。
进程退出,返回值为 3
然而,在调试模式下,整个程序运行,但在我得到的 main 函数的 return 0 语句中
程序收到信号SIGTRAP,跟踪/断点陷阱。
我在 Windows 7 上使用 Orwell Dev/C++。据我所知,第一个问题是抛出但未捕获的异常(我还没有自学异常,所以我不知道该怎么做,但我可以阅读)并且它可能会破坏堆栈。后一个错误我无法获得太多具体信息。任何人都可以请我指出解决方案的方向吗?哦,还有,该函数在第四次崩溃之前被调用了三次。
//Get a line of data from a file
std::string getData( std::string file, int line )
{
std::string data;
std::ifstream fileOpen(file.c_str());
if (fileOpen.is_open())
{
if( fileOpen.good() )
{
for( int lineno = 0; getline(fileOpen,data) && lineno < line; lineno ++ )
{
if( lineno != line )
{
data = "";
}
}
}
fileOpen.close();
}
return data;
}
//Parse comma delimited string into a vector
void parseData( std::vector<double> &temp, std::string data )
{
std::istringstream ss(data);
std::string token;
while(std::getline(ss, token, ','))
{
temp.push_back(atoi(token.c_str()));
}
}
这些是由这样的代码调用的:
std::string instData = getData( levelName+".dat", 2 );
if( instData != "" )
{
parseData( temp, instData );
instances.resize(temp.size() / 4);
j = 0;
for( int i = 0; i < temp.size(); i += 4 )
{
instances[ j ].type = temp[ i ];
instances[ j ].xPos = temp[ i + 1 ];
instances[ j ].yPos = temp[ i + 2 ];
instances[ j ].zIndex = temp[ i + 3 ];
j ++;
}
temp.clear();
}
此代码本身是函数的一部分,该函数旨在用指定文件中的数据填充各种向量。不过,里面的其余代码与上面的基本相同。
【问题讨论】:
-
if (lineo != line)语句是多余的,因为只有当lineno小于 小于line时循环才会运行,这意味着它始终为真。 -
你是对的。删除它并将
lineno < line更改为 -
这是与问题相关的整个代码吗?你到底在用
data做什么,你是如何/在哪里调用这个函数的? -
该文件有一堆用逗号分隔的整数。
data被发送到另一个函数,该函数将它们放入向量中。 -
那么这段代码没有显示任何可能导致运行时错误的内容,你能告诉我们你描述的代码吗?
标签: c++