c ++无法使用ifstream分段错误错误

时间:2017-01-13 21:49:11

标签: c++ qt segmentation-fault qt-creator ifstream

我有从目录中读取文本文件的问题。

这是我的代码示例部分。 (如果你想我可以上传整个代码)

ifstream file;

// Get Total Number of Lines from a sample text file
file.open(globLabel0.gl_pathv[0]); 
for (int i = 0; getline(file, line); ++i)
    columnSize++;
if(file.is_open())
    file.close();

float trainingData[trainingDataRowSize][columnSize];
float testData[testDataRowSize][columnSize];

// Define Counters for Loading Samples
int columnCount=0;
int rowCount=0;
int histVal=0;

// Load Label0 Samples to Training Data
for(unsigned int i=0;i<globLabel0.gl_pathc;i++){
    file.open(globLabel0.gl_pathv[i]);
    while(file >> histVal){
        trainingData[i][columnCount]=(histVal);
        columnCount++;
    }
    file.close();
    rowCount=i;
    columnCount=0;
}

让我一步一步告诉你代码:

1st:我初始化了我的ifstream对象。

ifstream file;

第二:我将所有文本文件存储在globLabel0对象中,并且globLabel0初始化如下:

glob_t globLabel0;

然后我将所有文本文件存储在目录中,如下所示:

glob(trainLabel0.c_str(),GLOB_TILDE,NULL,&globLabel0);

我绝对知道globLabel0有5923个文本文件,我在调试过程中看到过。

然后我尝试打开第一个文本文件,如下所示

 file.open(globLabel0.gl_pathv[0]);

第3名:找到columnSize后。我关闭了我的文件对象。

 file.close();

第四:这是我的问题,当我尝试在循环中打开文件

  for(unsigned int i=0;i<globLabel0.gl_pathc;i++){
      file.open(globLabel0.gl_pathv[i]); // Problem Here

我有以下错误:

enter image description here

如果可能的话,请你告诉我哪里弄错了?

1 个答案:

答案 0 :(得分:0)

您正在使用相同的输入流来打开多个文件,这导致只有第一个文件被正确打开,因此您可以在打开文件后关闭内部然后打开下一个文件,依此类推:

// after any read of a file if you want to open another file then clse the file to save and clear its buffer then open the next...

file.close();
file.clear();

for(unsigned int i=0;i<globLabel0.gl_pathc;i++){
    file.open(globLabel0.gl_pathv[i]);

    // read data to an array  or vector or list...
    while(file >> histVal){
        trainingData[i][columnCount]=(histVal);
        columnCount++;

    file.close();
    file.clear(); // it is also important
}