【发布时间】:2015-03-25 05:12:45
【问题描述】:
我正在逐行读取文本文件,其内容用逗号分隔,并通过使用 getline() 提取到我的 stringColor、stringName、stringReward 变量中进行解析,传递到我的 stringstream ss,然后传递给我的 tileArray 指针数组到相应的 int、string 和 int 变量中。
我的程序可以编译,但是当我运行它时,它会生成一个分段错误 11,这似乎是我将行内容传递到 stringstream 的位置。但是我找不到问题出在哪里...
如果有人能指出错误在哪里,我将不胜感激。
这是我试图从文本文件中读取的每一行的格式。 它应该能够读取任意行数。
0,平铺 1,5
4,瓷砖 2,0
2,平铺4,1
#include <stdio.h>
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct
{
int color;
string name;
int reward;
}tile;
int main()
{
string line;
int numberOfLines = 0;
ifstream inputFile("inputFile.txt");
if (inputFile.is_open())
{
while(getline(inputFile, line))
{
++numberOfLines; //value to set tile amount
cout << numberOfLines <<endl;
}
tile *tileArray = new tile[numberOfLines];
string stringColor, stringName, stringReward; //declare these values as strings and later convert
stringstream ss; //stringstream variable to convert string variable
for(int n = 0; n<(numberOfLines-1); n++)
{
getline(inputFile, stringColor, ','); //delimiter at first comma
cout << stringColor << endl;
getline(inputFile, stringName, ','); // delimiter at second
cout << stringName << endl;
getline(inputFile, stringReward); // stop at the end of the line
cout << stringReward << endl;
ss<<stringColor;
ss>>tileArray[n]->color;
ss.str("");
ss.clear();
cout << tileArray[n]->color;
ss<<stringName;
ss>>tileArray[n]->name;
ss.str("");
ss.clear();
cout << tileArray[n]->name;
ss<<stringReward;
ss>>tileArray[n]->reward;
ss.str("");
ss.clear();
cout << tileArray[n]->reward;
}
}
return 0;
}
【问题讨论】:
-
指针数组在哪里?你有一个
tile的数组,但我没有看到一个指针数组。顺便说一句,指针数组将是:new tile * [24]; -
也许您可以使用调试器并告诉我们是哪一行导致了问题。
-
我建议您删除数组并使用
std::vector。你会遇到更少的问题。 -
生成核心转储并使用 gdb 对其进行分析...几乎不需要几分钟...这样至少可以知道行号。一旦 gdb 处于活动状态,
sudo gdb -c "core file" *.exe后跟where命令
标签: c++ arrays pointers getline stringstream