当我通过valgrind运行我的程序时,出现一个错误。问题是,它不会告诉我哪里有未初始化的字节被分配:Valgrind无法找到未初始化数据的堆栈分配
==22141== Syscall param write(buf) points to uninitialised byte(s)
==22141== at 0x5B68900: __write_nocancel (syscall-template.S:82)
==22141== by 0x5AFB882: [email protected]@GLIBC_2.2.5 (fileops.c:1289)
==22141== by 0x5AFB749: new_do_write (fileops.c:543)
==22141== by 0x5AFCEB4: [email protected]@GLIBC_2.2.5 (fileops.c:516)
==22141== by 0x5AFDD3E: _IO_switch_to_get_mode (genops.c:189)
==22141== by 0x5AFBA96: [email protected]@GLIBC_2.2.5 (fileops.c:999)
==22141== by 0x5AF4F25: rewind (rewind.c:37)
==22141== by 0x567D149: CBFileAppend (CBFileEC.c:69)
==22141== by 0x5473AFA: CBDatabaseCreateDeletionIndex (CBDatabase.c:270)
==22141== by 0x5473195: CBInitDatabase (CBDatabase.c:112)
==22141== by 0x54721A1: CBNewAddressStorage (CBAddressStorage.c:37)
==22141== by 0x401F67: main (testCBAddressManager.c:226)
==22141== Address 0x402a009 is not stack'd, malloc'd or (recently) free'd
==22141== Uninitialised value was created by a stack allocation
==22141== at 0x546F750: ??? (in /media/sf_BitEagle_Projects/cbitcoin/bin/libcbitcoin-storage.2.0.so)
我将是假设这意味着一些无效的指针的堆栈是否正确?这发生在rewind()中,我不明白为什么倒带会是这样的。我尝试将valgrind进程附加到gdb,并试图在文件指针上打印ftell()的结果。这导致valgrind与此退出:
valgrind: m_syswrap/syswrap-main.c:1296 (vgPlain_client_syscall): Assertion 'sci->status.what == SsIdle' failed.
==22938== at 0x3804CA36: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==22938== by 0x3804CBDC: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==22938== by 0x38091F55: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==22938== by 0x3808E5DF: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==22938== by 0x3808F739: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==22938== by 0x3809F7D5: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
sched status:
running_tid=1
Thread 1: status = VgTs_Runnable
==22938== at 0x5B68900: __write_nocancel (syscall-template.S:82)
==22938== by 0x5AFB882: [email protected]@GLIBC_2.2.5 (fileops.c:1289)
==22938== by 0x5AFB749: new_do_write (fileops.c:543)
==22938== by 0x5AFCEB4: [email protected]@GLIBC_2.2.5 (fileops.c:516)
==22938== by 0x5AFDD3E: _IO_switch_to_get_mode (genops.c:189)
==22938== by 0x5AFBA96: [email protected]@GLIBC_2.2.5 (fileops.c:999)
==22938== by 0x5AF1AA5: ftell (ioftell.c:41)
==22938== by 0x40133F: ??? (in /media/sf_BitEagle_Projects/cbitcoin/bin/testCBAddressManager)
==22938== by 0xF75E467: ???
==22938== by 0x7FEFFF3BF: ???
==22938== by 0xF75E467: ???
==22938== by 0x546DE87: ??? (in /media/sf_BitEagle_Projects/cbitcoin/bin/libcbitcoin-storage.2.0.so)
==22938== by 0x7FEFFF3DF: ???
我将如何去确定此错误的原因?
编辑:我解决了我遇到的其他问题,但这仍然存在。
这是从这里代码:https://github.com/MatthewLM/cbitcoin/blob/master/test/testCBAddressManager.c
文件IO代码是在这里:https://github.com/MatthewLM/cbitcoin/tree/master/dependencies/storage
谢谢。
您使用哪个过程来安装valgrind? – Sebivor
我很确定这是包含在Linux Mint中,我不需要自己安装它。 –
请给我们展示一个最小的可编译测试用例。 – Sebivor