首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fclose()时出错

使用fclose()时出错
EN

Stack Overflow用户
提问于 2018-07-04 04:42:47
回答 1查看 97关注 0票数 0

当我尝试使用fclose关闭输出文件时,有一段代码失败。代码如下所示:

代码语言:javascript
复制
void WriteArrayForCheck(int numLines, double **Array) {
    char outFile2[300];
    sprintf(outFile2, "OutputArray.txt");
    FILE *outputFile2;
    outputFile2 = fopen(outFile2, "w");
    int incRow;
    for (incRow = 0; incRow < numLines - 1; incRow++) {
         fprintf(outputFile2, "%lf,%lf,%lf\n",
                 Array[incRow][1], Array[incRow][2], Array[incRow][3]);
    }
    fclose(outputFile2);
}

我最后得到了一个与我的可执行文件相关的错误,它说:

代码语言:javascript
复制
free(): invalid next size (normal): 0x0000000001ce1710 ***

还有一大堆其他没道理的东西...具有讽刺意味的是,如果我注释掉与fclose相关的行,那么程序就不会崩溃,并且运行得很好……我以前没有遇到过这个问题。我确信我的矩阵也会适当地递增。PLease让我知道你的想法。

EN

回答 1

Stack Overflow用户

发布于 2018-07-04 05:04:23

发布的代码似乎没有明显的问题。

但是,请注意:

对于fclose.

  • You,你应该始终检查fopen()的返回值并报告失败,而不是通过将代码传递给NULL来冒未定义行为的风险。和/或fclose.

  • You应该简化前几个语句,因为你做了一些更复杂的事情来计算文件名,发布它,因为问题可能存在于你省略的看似无害的代码中。

  • double的代码转换说明符是<代码>d15,<代码>d16修饰符在此上下文中无用且被忽略。在fscanf()中需要区分floatdouble,但在fprintf中不需要,因为float值总是作为double传递给变量参数functions.
  • The索引值123可能不正确,数组是基于C的0
  • incRow < numLines - 1处停止循环也是意想不到的,为什么省略矩阵的最后一行?如果你真的是认真的,发表评论将有助于澄清原因。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51162573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档