【问题标题】:C++: Segmentation Fault (11) error when trying to read a file and pass it into a 2D array?C++:尝试读取文件并将其传递到二维数组时出现分段错误 (11) 错误?
【发布时间】:2016-11-09 03:46:59
【问题描述】:

所以我对 C++ 非常陌生,我试图从命令行读取文件,然后将其移动到 2D 字符数组中,但每当我运行程序时,我都会收到此错误:“终止到期发出信号:分段故障 (11)"。有谁知道为什么?如果有人有任何代码建议,我将不胜感激!

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

const int MAX_ROW = 24;
const int MAX_COL = 80;

int main(int argc, char *argv[]) 
{
    int row = 0, col = 0;
    string line;
    char textArray[MAX_ROW][MAX_COL];

    ifstream inFile;
    inFile.open(argv[0]);
    getline(inFile, line);
    while(line.length() > 0)
    {
        for(int i = 0; i < line.length(); i++)
            textArray[row][i] = line[i];
        row++;
        if(line.length() > col)
            col = line.length();
        getline(inFile, line);
    }
    inFile.close();
    return 0;
}

【问题讨论】:

  • Debug THEN post to SO 一旦你对正在发生的事情有了更好的了解。从inFile.open(argv[0]); 开始 - 没有错误检查,您确定这是您要打开的文件吗?
  • 我没有看到任何可以防止您溢出数组边界的范围测试。

标签: c++ arrays multidimensional-array fstream


【解决方案1】:

while 循环中的条件可以这样发生

while(line.length() > 0)

总是等于 true,你会得到一个无限循环。

其实这个条件

while(line.length() > 0)

不检查之前的getline调用是否成功。

按照以下方式重写循环

#include <cstring>

//...

while ( row < MAX_ROW && getline(inFile, line) )
{
    std::strncpy( textArray[row], line.c_str(), MAX_COL );
    textArray[row][MAX_COL - 1] = '\0'; 
    row++;
}

【讨论】:

    【解决方案2】:

    可能是因为索引超出范围。检查行长是否超过数组大小。

    尝试gdb YOURAPPLICATION 来调试哪个行给出了该错误(确保在编译二进制文件时使用了 -g 标志)。

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 2017-08-12
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 2017-04-18
      • 2016-08-19
      • 2015-04-13
      • 2018-05-01
      相关资源
      最近更新 更多