如何解决“ free:在tcache 2中检测到双重释放”是什么意思?
我正在编写一个用C进行多项式加法的程序。我在使用free()
时遇到了一些问题。我想出了一个解决方案,但我不知道后台发生了什么。
我正在上传完整的文件(而不是代码段)。这是GitHub repository。我提供了正确的版本为polynomial.c
和错误的版本为polynomial_uncorrected.c
。问题出在polynomial_uncorrected.c
中的第41-42行。
我运行程序。
如果p1
和p2
都不是0多项式,则程序正在正确运行。如果p1
或p2
中的任何一个是零多项式(所有元素都输入为0),则我遇到了以下问题。
free(): double free detected in tcache 2
Aborted (core dumped)
Valgrind显示以下输出
==11720== Memcheck,a memory error detector
==11720== Copyright (C) 2002-2017,and GNU GPL'd,by Julian Seward et al.
==11720== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==11720== Command: ./p_c.out
==11720==
FIRST POLYNOMIAL :
Enter degree of polynomial : 2
Enter coefficient of x^2 : 1
Enter coefficient of x^1 : 2
Enter coefficient of x^0 : 3
SECOND POLYNOMIAL :
Enter degree of polynomial : 0
Enter coefficient of x^0 : 0
FIRST POLYNOMIAL :
1x^2 + 2x + 3
SECOND POLYNOMIAL :
0
SUM :
1x^2 + 2x + 3
==11720== Invalid free() / delete / delete[] / realloc()
==11720== at 0x483A9AB: free (vg_replace_malloc.c:538)
==11720== by 0x1092F2: main (in /<path>/p_c.out)
==11720== Address 0x4a4b960 is 0 bytes inside a block of size 24 free'd
==11720== at 0x483A9AB: free (vg_replace_malloc.c:538)
==11720== by 0x1092CC: main (in /<path>/p_c.out)
==11720== Block was alloc'd at
==11720== at 0x483BD7B: realloc (vg_replace_malloc.c:834)
==11720== by 0x1093D8: inp_pol (in /<path>/p_c.out)
==11720== by 0x10920B: main (in /<path>/p_c.out)
==11720==
==11720==
==11720== HEAP SUMMARY:
==11720== in use at exit: 0 bytes in 0 blocks
==11720== total heap usage: 5 allocs,6 frees,2,096 bytes allocated
==11720==
==11720== All heap blocks were freed -- no leaks are possible
==11720==
==11720== For lists of detected and suppressed errors,rerun with: -s
==11720== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
我以为p3没有分配,所以我重新分配了
p3 = realloc (p3,(*size3)*sizeof(element));
这些行仍然在代码(polynomial_uncorrected.c)中作为注释出现。但是我遇到了同样的错误。
然后我意识到只有free(p3)
和p1
都不为NULL(即非零多项式)时,才应该p2
。它奏效了,但我不知道为什么。
为什么要说在tcache 2中检测到双重免费?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。