【问题标题】:Abort trap:6 for fopen中止陷阱:6 for fopen
【发布时间】:2015-10-30 23:39:42
【问题描述】:

我试图读入一个名为“pg.txt”的文件并打印出它的内容,但我收到了abort trap:6 错误。我不明白我为什么会得到它。

这是我的main file

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(){
   char s1[10];
   int d1;
   int n1;
   int n2;
   int n3;
   int n4;

   FILE * fp;

   fp = fopen ("pg.txt", "r");
   int i;
   fscanf(fp, "%d", &d1);
   printf("numTypes |%d|\n", d1 );
   for (i = 0; i < d1; i++){
     fscanf(fp, "%s %d %d %d %d", s1, &n1, &n2, &n3, &n4);
     printf("type1 |%s|\n", s1 );
     printf("Avg CPU |%d|\n", n1 );
     printf("avg burst |%d|\n", n2 );
     printf("avg interarrival |%d|\n", n3 );
     printf("avg io |%d|\n", n4 );
   }

   printf("Before CLOSING\n");
   fclose(fp);

   return(0);
}

这是我的pg.txt 文件:

2
interactive 20 10 80 5
batch 500 250 1000 10

这是输出:

numTypes |2|
type1 |interactive|
Avg CPU |20|
avg burst |10|
avg interarrival |80|
avg io |5|
type1 |batch|
Avg CPU |500|
avg burst |250|
avg interarrival |1000|
avg io |10|
Before CLOSING
Abort trap: 6

我是 C 新手,因此我们将不胜感激任何解释和帮助。

【问题讨论】:

  • 哪一行出现错误?
  • 你应该检查fopen()是否成功。如果尝试打开文件时出错,则返回 NULL
  • @Barmar 这几乎肯定是原因。
  • @user3121023 作为答案发布,很可能在数组边界之外写入会破坏堆栈。
  • @user3121023 我尝试了 char s1[12] 并且成功了!谢谢!

标签: c memory-management fopen abort


【解决方案1】:

问题是 s1 没有分配空间。将 s1[10] 更改为 s1[12] 后,就不再有中止陷阱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2014-12-13
    • 2017-05-11
    相关资源
    最近更新 更多