【问题标题】:C: Segmentation Fault when reading from a fileC:从文件读取时出现分段错误
【发布时间】:2015-04-01 02:41:30
【问题描述】:

我最近开始从事这个项目,但在将某些内容读入全局变量时遇到了麻烦。这是为了练习 pthreads,这就是我首先使用全局变量的原因。该程序应该从代表已解决数独难题的文件中读取数字,并且文本文件将被格式化为 9 个数字字符后跟一个新行,共 9 次。我已经确定,在运行这个程序时,文件是这样格式化的。我知道我的这段代码包含分段错误,但我不知道在哪里。我只能假设它与 fgets() 有关。但是,我查找的资源中没有任何内容会让我认为我使用不正确。当我求助于 fgetc 时,它甚至会这样做,一次读取它,为 fgetc 返回一个 int 进行调整,这与 fgets 将字符串分配给变量(在本例中为 s)不同。

除非我确定我找不到它,否则我不会把它带入堆栈溢出;我一直在梳理代码一个小时试图找到这个段错误,这对我来说没有任何意义。我知道 Seg Fault 就在这里,因为紧接在它之后,它应该打印出整个拼图矩阵,但它并没有那么远。

int main(int argc, char *argv[]) {

    FILE* puzzlefile;
    char s[10];
    int i=0, j=0, skip;
    //open the file passed in via command line
    puzzlefile = fopen(argv[1], "r");

    for (i=0; i<9; i++){
        //get first string of 10 characters
        fgets(s,10, puzzlefile);
        for (j=0; j<9; i++){
            //read the numbers from s into the puzzle 2D
            //array, which takes ints. Ignore the 10th
            //character, which will be \n
            puzzle[j][i] = (int)(s[j]-'0');
        }
    }
    ...
}

【问题讨论】:

  • 请准确告诉我们puzzle 的声明内容。
  • “这是为了练习 pthreads,这就是我首先使用全局变量的原因。” XY 问题:你想做 X,但不知道怎么做。你认为你可以使用 Y 来解决它,但也不知道该怎么做。你问 Y,这是一件奇怪的事情。只需询问 X。
  • 它被声明为“intuzzle[9][9]”

标签: c linux segmentation-fault


【解决方案1】:

您的问题似乎是这样的:

  for (j=0; j<9; i++)
                 ^^^ 

这应该是j++,而不是i++

【讨论】:

  • 这确实看起来像一个不受欢迎的无限循环。
  • 嗯,这解决了问题......有点。我似乎有一些调试要做,但这大部分都解决了。
猜你喜欢
  • 2020-08-14
  • 2022-10-04
  • 2019-06-08
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多