【问题标题】:Segmentation fault while using sprintf in C [closed]在 C 中使用 sprintf 时出现分段错误 [关闭]
【发布时间】:2019-12-31 01:54:09
【问题描述】:

我正在尝试在 C 中打开标有步骤编号的文本文件。使用 GCC 编译器进行编译时,我没有收到任何错误。但是在执行时,我在 1016 步后出现分段错误。输出文件应该保存在名为 Config 的文件夹中。

我已经尝试了以下代码。

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

int main() {
    int i,j,itime,nwarm;
    itime =0;
    nwarm = 25000000;

    while (itime<=nwarm){   
            printf ("itime =%d\n", itime);
            char filename[128];
            sprintf(filename,"./Config/%d", itime);
            FILE *fConfig=fopen(filename,"w");
            // Configuration print //
            for (i=0; i<100; i++){
                for (j=0;j<2;j++){
                    fprintf(fConfig,"%lf ",1.0);
                }
                fprintf(fConfig,"\n");
            }
        itime = itime + 1;

    }
    return 0;

}

【问题讨论】:

  • 首先需要在while循环结束时关闭连接:fclose(fConfig);。那么,你确定段错误来自sprintf吗?最后,你想用循环做什么?现在您打印两次“1.0”,然后打印一个换行符,然后重复 100 次...
  • @Chelmy88 发生这种情况是因为 OP 没有关闭文件。它可以来自任何函数。
  • @JL2210 我也这么认为,但既然问题提到了sprintf,他可能知道,例如来自gdb,segfault来自这里。
  • @Chelmy88 不,这是因为没有关闭文件。我很快测试了它,解决了这个问题。

标签: c segmentation-fault printf


【解决方案1】:

一种可能性:您为循环的每次迭代打开一个文件句柄,但您没有关闭它。最终,您为该进程打开了太多文件句柄,fopen 失败,返回一个 NULL 指针。但是你不检查这个指针,最终取消引用它,导致一个段错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多