运行程序时出现此错误。它很好,它不会运行。它没有给我一个行号,但是通过消除过程似乎打破了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)
答案 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)
根据您发布的内容,看起来好像没有正确声明变量,还有一些陈述缺失。