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编程的新手 - 请在这方面帮助我。
提前致谢
答案 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是...嗯......好吧,文件指针名称。
希望我帮助过。