首页 > 解决方案 > 需要帮助解决 C 中的分段错误

问题描述

我目前遇到分段错误的问题。这是我的学校项目,我不断收到分段错误,我不知道为什么。我的任务是生成一个程序来读取 txt 文件中的值并在 C 中显示它。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    float training_input[90][8],training_output[90][1],testing_input[10][8],testing_output[10][1];
    int i;
    FILE *fpointer;
    fpointer= fopen("project.txt","r");
    for (i=0;i <=90; i++ )
    {
        fscanf(fpointer, "%f, %f, %f, %f, %f, %f, %f, %f, %f, %f",&training_input[i][0],&training_input[i][1],&training_input[i][2],&training_input[i][3],&training_input[i][4],&training_input[i][5],&training_input[i][6],&training_input[i][7],&training_input[i][8],&training_output[i][9]);
        printf("\n %f,%f,%f,%f,%f,%f,%f,%f,%f,%f ",training_input[i][0],training_input[i][1],training_input[i][2],training_input[i][3],training_input[i][4],training_input[i][5],training_input[i][6],training_input[i][7],training_input[i][8],training_output[i][9]);
    }
    for (i=91; 1<=101; i++)
    {
        fscanf(fpointer, "%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, ",&testing_input[i][0],&testing_input[i][1],&testing_input[i][2],&testing_input[i][3],&testing_input[i][4],&testing_input[i][5],&testing_input[i][6],&testing_input[i][7],&testing_input[i][8],&testing_output[i][9]);
        printf("\n %f,%f,%f,%f,%f,%f,%f,%f,%f, %f, ",testing_input[i][0],testing_input[i][1],testing_input[i][2],testing_input[i][3],testing_input[i][4],testing_input[i][5],testing_input[i][6],testing_input[i][7],testing_input[i][8],testing_output[i][9]);
    }
    fclose (fpointer);
    return 0;

分段错误总是发生在 fscanf 和 printf 中。

标签: c

解决方案


当您定义一个一维包含 90 个元素的数组时:

float training_input[90][8]

你不能像这样迭代它:

for (i=0;i <=90; i++ )

因为您还将尝试访问90位于数组边界之外的索引 - 有效索引是 from 0to 89。这就是你得到分段错误的原因。循环中的检查必须是i < 90.

此外,在第二个循环中,您将迭代到101,而您的数组被定义为具有 10 个元素。这将是第二个分段错误。


推荐阅读