c - 需要帮助解决 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 中。
解决方案
当您定义一个一维包含 90 个元素的数组时:
float training_input[90][8]
你不能像这样迭代它:
for (i=0;i <=90; i++ )
因为您还将尝试访问90
位于数组边界之外的索引 - 有效索引是 from 0
to 89
。这就是你得到分段错误的原因。循环中的检查必须是i < 90
.
此外,在第二个循环中,您将迭代到101
,而您的数组被定义为具有 10 个元素。这将是第二个分段错误。
推荐阅读
- redux-devtools-extension - 如何将 Redux Dev Tools Extension 窗口固定到 Chrome 浏览器
- sql - 您如何在 SQL 中按日期范围的动态数量进行过滤?
- elasticsearch - 单个对象数组上的 Elasticsearch 聚合
- android - 如何使用 Recyclerview 将下载目录中的所有视频显示到 Android 应用程序的活动中?
- java - 使用 CollectingAndThen 方法在 Streams 中的 groupingBy -> 如何摆脱 Optional 然后在地图上使用 Max :)
- android - Android Studio 需要在反复运行应用后与 gradle 同步
- python - 如何将变量从 python 脚本传递到烧瓶应用程序
- java - 如何防止openapi-generator在java中使用通配符导入
- paypal - 通过 Paypal 自动付款(发件人是企业帐户)
- python - 使用正则表达式替换数据框中字符串列表中的文本