c FILE 程序错误 : double free or corruption

标签 c gcc file

这是我的程序,它需要 10 个整数并找出偶数或奇数并将它们存储在各自的文件中。我使用 gcc。

#include<stdio.h>
int main()
{
int a,i;
FILE *fp1,*fp2,*fp3;
fp1=fopen("data","w");
for(i=0;i<10;i++)
{
scanf("%d",&a);
putw(a,fp1);
}
fclose(fp1);
fp1=fopen("data","r");
fp2=fopen("even","w");
fp3=fopen("odd","w");
while((a=getw(fp1))!=EOF)
if(a%2==0)
putw(a,fp2);
else
putw(a,fp3);
fclose(fp1);
fclose(fp2);
fclose(fp1);
return 0;
}

输入 10 个值后我得到这个

*** glibc detected *** ./a.out: double free or corruption (!prev): 0x09b79008 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6c501)[0x17c501]
/lib/libc.so.6(+0x6dd70)[0x17dd70]
/lib/libc.so.6(cfree+0x6d)[0x180e5d]
/lib/libc.so.6(fclose+0x14a)[0x16c81a]
./a.out[0x80485e4]
/lib/libc.so.6(__libc_start_main+0xe7)[0x126ce7]
./a.out[0x8048421]
======= Memory map: ========
00110000-00267000 r-xp 00000000 08:04 686829     /lib/libc-2.12.1.so
00267000-00268000 ---p 00157000 08:04 686829     /lib/libc-2.12.1.so
00268000-0026a000 r--p 00157000 08:04 686829     /lib/libc-2.12.1.so
0026a000-0026b000 rw-p 00159000 08:04 686829     /lib/libc-2.12.1.so
0026b000-0026e000 rw-p 00000000 00:00 0 
007b2000-007ce000 r-xp 00000000 08:04 686805     /lib/ld-2.12.1.so
007ce000-007cf000 r--p 0001b000 08:04 686805     /lib/ld-2.12.1.so
007cf000-007d0000 rw-p 0001c000 08:04 686805     /lib/ld-2.12.1.so
009cc000-009cd000 r-xp 00000000 00:00 0          [vdso]
00a2c000-00a46000 r-xp 00000000 08:04 686863     /lib/libgcc_s.so.1
00a46000-00a47000 r--p 00019000 08:04 686863     /lib/libgcc_s.so.1
00a47000-00a48000 rw-p 0001a000 08:04 686863     /lib/libgcc_s.so.1
08048000-08049000 r-xp 00000000 08:04 753598     /home/bobby/Desktop/c/a.out
08049000-0804a000 r--p 00000000 08:04 753598     /home/bobby/Desktop/c/a.out
0804a000-0804b000 rw-p 00001000 08:04 753598     /home/bobby/Desktop/c/a.out
09b79000-09b9a000 rw-p 00000000 00:00 0          [heap]
b7600000-b7621000 rw-p 00000000 00:00 0 
b7621000-b7700000 ---p 00000000 00:00 0 
b77df000-b77e0000 rw-p 00000000 00:00 0 
b77ea000-b77eb000 rw-p 00000000 00:00 0 
b77ed000-b77f0000 rw-p 00000000 00:00 0 
bfed2000-bfef3000 rw-p 00000000 00:00 0          [stack]
Aborted

我想知道这是什么。这是我第一次遇到此类错误。我想了解该错误并找出我的程序出了什么问题。

最佳答案

您将关闭 fp1 两次。查看 return 之前的最后一行:)

如果我正确解释了您的程序,我怀疑您想关闭fp3。堆栈跟踪中还有一条线索,错误发生在 fclose 内部的某个地方。

关于c FILE 程序错误 : double free or corruption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842588/

相关文章:

c++ - C++ 中的文件 Glob

c# - 创建一个仅限管理员访问的目录

java - Fs 只读存档 FilesystemException

c - ICMP 套接字(赢)

c++ - 哪种方法可以测试乘法有符号整数溢出?

c - 直接打印转义字符及其与ASCII表的关系

c - 禁用 "warning: the address of ' x' 将始终评估为 'true' "

c++ - 默认情况下,GCC 4.3.3 中如何处理 C++ 风格的注释?

c - stdout/stderr 消息的约定是什么?

c++11 - 如何使用旧的 ABI 通过 GCC 5 编译 boost?