【问题标题】:Seg Fault Error in C ProgramC 程序中的 Seg Fault 错误
【发布时间】:2013-02-18 10:16:25
【问题描述】:

我有一个超过 300 行的程序,除了导致 seg 错误的 fclose 之外,它 100% 运行......现在,我什至无法让我的程序运行。 gdb 给了我这个错误,老实说我不知道​​如何解释

    ____strtol_l_internal (nptr=0x0, endptr=0x0, base=10,
       group=<value optimized out>, loc=0x349c78d580) at ../stdlib/strtol_l.c:298
       298       while (ISSPACE (*s))

谁能告诉我这是什么意思?

 readLinesFromFile(FILE* fPtr, int* num1, int* num2, char** strs, int lines)
 {
  int i;

  char data[50];

for (i = 0; i < lines; i++){
    fgets(data, 50, fPtr);
    strcpy (*(strs + i), strtok(data, " "));
    *(num1 + i) = atoi(strtok(NULL, " "));
    *(num2 + i) = atoi(strtok(NULL, " "));
}

【问题讨论】:

  • 你在运行 Linux 吗?如果是这种情况,请在 valgrind 下运行您的程序。
  • 您是否在启用优化的情况下进行编译?通过使用-O0 编译,您可能会获得更多信息输出。
  • 看起来您将 NULL 指针作为第一个参数传递给 strtol。
  • 你试图关闭错误的描述符
  • 您需要显示更多代码。它似乎在strtol() 崩溃了,如果你打电话给它似乎是一个开始寻找的好地方。

标签: c debugging gdb


【解决方案1】:

您确定调用fclose 时会触发SIGSEGV

看起来您只是简单地将NULL 指针作为strtol 函数的第一个参数传递(在代码的其他部分中)

另一种选择可能是堆栈完全混乱。

尝试使用gdb 运行它,当它崩溃时使用命令where 来查看堆栈

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    相关资源
    最近更新 更多