C++ 使用stringstream将字符串解析为指针数组时出现分段错误

C++ 使用stringstream将字符串解析为指针数组时出现分段错误,c++,arrays,pointers,getline,stringstream,C++,Arrays,Pointers,Getline,Stringstream,我正在逐行读取一个文本文件,该文件的内容由逗号分隔,并通过使用getline()提取到我的stringColor、stringName、stringReward变量进行解析,然后传递到我的stringstream ss,然后传递到我的TilerRay指针数组,分别转换为int、string和int变量 我的程序进行编译,但当我运行它时,它会生成一个分段错误11,似乎就是我将行内容传递到stringstream的位置。我找不到问题出在哪里,但是 如果有人能指出错误所在,我将不胜感激 这是我试图从文

我正在逐行读取一个文本文件,该文件的内容由逗号分隔,并通过使用getline()提取到我的stringColor、stringName、stringReward变量进行解析,然后传递到我的stringstream ss,然后传递到我的TilerRay指针数组,分别转换为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;
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
类型定义结构
{
内色;
字符串名;
智力奖励;
}瓷砖;
int main()
{
弦线;
int numberOfLines=0;
ifstream输入文件(“inputFile.txt”);
if(inputFile.is_open())
{
while(getline(inputFile,line))
{
++numberOfLines;//设置平铺数量的值

cout我将简化
stringstream
对象的使用。使用相同的
stringstream
对象作为输入流和输出流需要深入理解内部位置是如何操作的

{
   // Create a nested block and a local istringstream in the nested scope
   istringstream ss(stringColor);
   ss >> tileArray[n]->color;
}
cout << tileArray[n]->color;
{
//在嵌套范围中创建嵌套块和本地istringstream
istringstream ss(stringColor);
ss>>Tileray[n]->颜色;
}
颜色;
同样地

{
   istringstream ss(stringName);
   ss >> tileArray[n]->name;
}
cout << tileArray[n]->name;
{
istringstream ss(stringName);
ss>>Tileray[n]->名称;
}
姓名;

{
istringstream ss(stringReward);
ss>>提拉雷[n]>奖励;
}
不能奖励;

指针数组在哪里?您有一个
tile
数组,但我没有看到指针数组。顺便说一句,指针数组应该是:
新tile*[24]
如果您可以使用调试器并告诉我们是哪一行导致了问题。我建议您删除数组并使用
std::vector
。问题会少一些。生成一个核心转储并使用gdb分析它…几乎不需要几分钟。这样至少可以知道行号。
sudo gdb-c“核心文件”*.exe
后接
where
命令一旦gdb激活谢谢,我接受了你的建议,但是它仍然会给出分段错误11错误。。。
{
   istringstream ss(stringReward);
   ss >> tileArray[n]->reward;
}
cout << tileArray[n]->reward;