c - 我该如何处理这个分段错误
问题描述
我不断收到相同的消息“分段错误:11”
gdb 告诉我断点就在主函数之后。在我声明 int j 的行中;我真的不明白这怎么可能破坏代码。
此函数读取的输入仅由 1 个字符串后跟 2 个数字组成,例如
约翰 22 43 山姆 11 23
它应该做的只是将整个输入存储在“elenco”中,然后打印字符串。
首先,我创建了一个与输入匹配的结构。然后我做了一个函数,目的是读取输入并存储在变量中。然后我创建了一个函数,其变量是读取输入(所以输入)并打印给定字符串的函数的输出
谁能帮我找出问题并解决它?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char name[20];
int distance;
int point;
} throw;
throw *read_file(FILE *f, int *j)
{
int i = 0;
int c;
int Dim = 32;
char buf[1000];
throw *list;
list = malloc(Dim *sizeof(*list));
if (list == NULL)
{
(*j) = 0;
return NULL;
}
while (fgets(buf, sizeof(buf), f)!= NULL)
{
sscanf(buf, "%19s %d %d",
list[*j].name,
&list[*j].distance,
&list[*j].point);
*j += 1;
if ( *j >= Dim)
{
Dim = Dim*2;
list = realloc(list, Dim *sizeof(*list));
if (list == NULL)
{
return NULL;
}
}
}
return list;
}
void print_everything(throw *list, int j)
{
int c;
for (c=0; c < j; c++ )
{
printf("%d\n",list[c].distance);
}
}
int main(int argc,const char *argcv[])
{
int j = 0;
FILE *file;
throw *list;
if (!( argc != 3))
{
printf("file's dimension is wrong\n");
return -1;
}
file = fopen(argcv[1], "r");
list = read_file(file, &j);
print_everything(list, j);
fclose(file);
return 0;
}
输入1.txt
马里奥 20 30
乔治 30 40
马里奥 40 40
大卫 32 20
马里奥 9 32
这正是文件包含的内容
解决方案
你的程序很好。您的问题在 input1.txt 中,您需要
Mario 20 30
Giorgio 30 40
Mario 40 40
Davide 32 20
Mario 9 32
使用 fgets() 阅读时,每一行都需要一个 \n
推荐阅读
- python - 根据开始和结束日期对时间序列数据进行分组
- protocol-buffers - 如何在 ProtoBuffer 中返回一个简单的布尔值?
- java - 如何单击网页上带有尾随空格字符的链接?
- kubernetes - Kubernetes 服务集群 ip 不可访问,但端点 ip 可从节点内访问
- javascript - 在谷歌地图上设置 lat 和 lng 变量的问题
- php - 如何在PHP中将循环数组放入数组存储数据
- go - 如何判断两个证书对是由 Golang 中的不同 CA 颁发的?
- android - 在 recyclerView 中使用滑动触摸侦听器时,指定为非 null 的错误参数为 null - Android
- c++ - 在游戏对象的组件等情况下使用组合或虚拟继承
- mysql - 如果实体与不同的实体相关联,我想防止删除该实体