*** glibc检测到*** ./a.out:free():指针无效:0x0804832a ***

时间:2011-04-12 03:25:48

标签: c

运行程序时出现此错误。它很好,它不会运行。它没有给我一个行号,但是通过消除过程似乎打破了char声明。

*** glibc detected *** ./a.out: free(): invalid pointer: 0x0804832a

然后它进入内存转储并以Aborted (core dumped)结束。

我不能发布代码,因为它是我的作业,但我已经被困了三个小时而没有到达任何地方。基本上只是尝试用fgets()读取文件。它看起来与此相似:

int main( void ) {
    file *filename char line[100];  // breaks here
    fgets(line, 100, filename);
}

知道为什么会发生这样的事情吗?我包括stdio,stdlib和string?


以下是整个错误:

======= Backtrace: =========
/lib/i686/cmov/libc.so.6[0xb760a764]
/lib/i686/cmov/libc.so.6(cfree+0x96)[0xb760c966]
/lib/i686/cmov/libc.so.6(_IO_free_backup_area+0x34)[0xb7608c94]
/lib/i686/cmov/libc.so.6(__uflow+0x61)[0xb7609421]
/lib/i686/cmov/libc.so.6(_IO_getline_info+0xa6)[0xb75fbdd6]
/lib/i686/cmov/libc.so.6(_IO_getline+0x41)[0xb75fbd21]
/lib/i686/cmov/libc.so.6(fgets+0xaa)[0xb75fac2a]
./a.out[0x80484ca]
/lib/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb75b2455]
./a.out[0x80483b1]
======= Memory map: ========
08048000-08049000 r-xp 00000000 00:14 24469538   /class-service/path/to/me/a.out
08049000-0804a000 rw-p 00000000 00:14 24469538   /class-service/path/to/me/a.out
08580000-085a1000 rw-p 08580000 00:00 0          [heap]
b758e000-b759a000 r-xp 00000000 08:02 897603     /lib/libgcc_s.so.1
b759a000-b759b000 rw-p 0000b000 08:02 897603     /lib/libgcc_s.so.1
b759b000-b759c000 rw-p b759b000 00:00 0 
b759c000-b76f1000 r-xp 00000000 08:02 906061     /lib/i686/cmov/libc-2.7.so
b76f1000-b76f2000 r--p 00155000 08:02 906061     /lib/i686/cmov/libc-2.7.so
b76f2000-b76f4000 rw-p 00156000 08:02 906061     /lib/i686/cmov/libc-2.7.so
b76f4000-b76f7000 rw-p b76f4000 00:00 0 
b7710000-b7712000 rw-p b7710000 00:00 0 
b7712000-b7713000 r-xp b7712000 00:00 0          [vdso]
b7713000-b772d000 r-xp 00000000 08:02 898005     /lib/ld-2.7.so
b772d000-b772f000 rw-p 0001a000 08:02 898005     /lib/ld-2.7.so
bff3f000-bff54000 rw-p bffea000 00:00 0          [stack]
Aborted (core dumped)

3 个答案:

答案 0 :(得分:2)

如果您的FILE *没有打开文件(FILE *file = fopen(filename, "r")),那么它很可能会崩溃,因为fgets(line, 100, file)无法从该文件中实际读取(它不是一个开放的流)。
严格来说,它崩溃是因为free被调用了一个无效的指针(不是一个NULL指针 - 标准允许在NULL指针上调用free()),而是指向一个其值为指向的指针到不再有效。但是,这是由fgets()电话引起的 请注意,char filename[] FILE*已调用的fopen()相同。

希望这有帮助!

答案 1 :(得分:0)

您的问题是通过对指针上的free的调用(无论是直接的还是间接的)给出的,这是无效的(因为它不是malloc'或者因为有一个讨厌的堆在某处腐败。)

答案 2 :(得分:0)

根据您发布的内容,看起来好像没有正确声明变量,还有一些陈述缺失。

尝试运行此示例http://computer.howstuffworks.com/c19.htm