【发布时间】:2017-05-09 11:45:39
【问题描述】:
我的 gdb 调试器出现问题,每次我尝试运行程序时,调试器都会在我使用“fgets”() 的那一行给出以下错误:_IO_fgets (buf=0x7ffffffffe330 "P \343\377\377\377\177", n=2, fp=0x0)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _node {
int value ;
struct _node * next ;
} node ;
void print_avg(node * head, int n)
{
int sum = 0 , i = 0;
node * p = head ;
for (i = 0 ; i < n ; i++) {
sum += p->value ;
p = p->next ;
}
printf("%f\n", ((float)sum / (float)n)) ;
}
int get_nums(node ** head)
{
int n = 1 ;
char line[4] ;
while (fgets(line, sizeof(line), stdin) != NULL) {
//strtok(line, "\n") ;
node * curr ;
curr = (node *) malloc(sizeof(node)) ;
curr->value = atoi(line) ;
curr->next = *head ;
*head = curr ;
n++ ;
}
return n ;
}
int main()
{
int n ;
node * head = NULL;
n = get_nums(&head) ;
print_avg(head, n) ;
return 0 ;
}
我不知道我的 fgets() 出了什么问题。有人有想法吗?
【问题讨论】:
-
也许用类似 valgrind 的东西运行代码?这会告诉你你在哪里浪费了内存。
-
是的。我用双指针修复了每个迭代问题中的覆盖头(我编辑了帖子),但问题是为什么我会看到 fgets() 出现这种错误?因为我在该行中没有看到任何逻辑或语法错误。
-
@MasterGL 您对
fgets的使用对我来说看起来是正确的。在下面阅读我的答案。如果fgets仍然存在段错误,请尝试char line[100];并报告问题是否消失。并且请检查您调试的代码是否是您编译的代码,并检查您编译的代码是否是您这里显示的代码,我们在这里经常看到这种错误。 -
"n=2" 很奇怪,因为您的代码将
line定义为大小为 4。
标签: c segmentation-fault fgets