写入文件时C中的分段错误

时间:2014-07-08 11:11:21

标签: c

void frameInfoData(int i,int j,int k)
{
    FILE *frameData;
    frameData=fopen("frame_Data.txt","a");
    fprintf(frameData,"Packet number is %d      Packet L %d         Packet Header L %d      ",i,j,k);
    fprintf(frameData,"\n");

}

以上是我编写文件的代码。我的数据大约是3170行。当我运行这个程序时,它会给我一个分段错误并转储核心。但是当我控制写入并写入3169行时,它将非常容易且正确地写入。

我是C编程的新手 - 请在这方面帮助我。

提前致谢

2 个答案:

答案 0 :(得分:2)

添加:

#include <errno.h>
#include <stdio.h>

//other code here

if (frameData == NULL) {
  perror("fopen()");
  return;
}

这应该让你的调试开始......

在返回之前不要忘记fclose(frameData),这可能也会在第二次调用函数时导致错误(文件已经打开)。

答案 1 :(得分:-1)

很可能不是fopen()的失败,但你应该检查它并退出程序,如果它不能正常工作(它在不工作时返回NULL指针):

FILE* fp = fopen("SOMEFILE.txt", "a");
if(!fp) //in other words - NOT fp - means FP == NULL
{
  printf("Error: Could not open the file specified.\n");
  exit(1);
}

合乎逻辑的原因是你没有使用fclose()fopen()总是更改(我的意思是它为不同的路径返回一个不同的指针),所以它使用动态内存,如malloc(),如果你学到了它比静态内存慢得多。动态记忆会 仍然被使用&#39;在程序中(无论它是在某个功能中还是在任何地方),直到你认为是免费的#39;它 - 当使用malloc()时,您只需使用函数free()即可释放内存。 使用fopen()时,即可免费使用&#39;动态内存在该指针上使用fclose() - 这样:

fclose(FILE_POINTER_NAME);

当FILE_POINTER_NAME是...嗯......好吧,文件指针名称。

希望我帮助过。