2012-04-15 2 views
1

Поэтому, учитывая этот выход:Почему Valgrind сообщает о ошибках чтения/записи INSIDE действительных блоков?

==80518== Invalid read of size 4 
==80518== at 0x558D: Node::ReadFolder(GFile*) (in ./ScribeRecoverMail2) 
==80518== by 0x7B61: Worker::Export(GFile*, GArray<Node*>&) (in ./ScribeRecoverMail2) 
==80518== by 0x8F7A: Worker::Main() (in ./ScribeRecoverMail2) 
==80518== by 0x142D64: ThreadEntryPoint(void*) (in /Users/matthew/Code/Scribe-Branches/v2.00/Utils/ScribeRecoverMail2/build/Debug/ScribeRecoverMail2.app/Contents/Frameworks/Lgi.framework/Versions/A/Lgi) 
==80518== by 0x47E258: _pthread_start (in /usr/lib/libSystem.B.dylib) 
==80518== by 0x47E0DD: thread_start (in /usr/lib/libSystem.B.dylib) 
==80518== Address 0x1d72f590 is 16 bytes inside a block of size 72 alloc'd 
==80518== at 0x41581: malloc (vg_replace_malloc.c:266) 
==80518== by 0x3D5616: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib) 
==80518== by 0x77A6: Worker::Scan(GFile*, GArray<Node*>&) (in ./ScribeRecoverMail2) 
==80518== by 0x8F0C: Worker::Main() (in ./ScribeRecoverMail2) 
==80518== by 0x142D64: ThreadEntryPoint(void*) (in /Users/matthew/Code/Scribe-Branches/v2.00/Utils/ScribeRecoverMail2/build/Debug/ScribeRecoverMail2.app/Contents/Frameworks/Lgi.framework/Versions/A/Lgi) 
==80518== by 0x47E258: _pthread_start (in /usr/lib/libSystem.B.dylib) 
==80518== by 0x47E0DD: thread_start (in /usr/lib/libSystem.B.dylib) 
==80518== 
==80518== Invalid read of size 4 
==80518== at 0x10B70F: GFile::Read(void*, int, int) (in /Users/matthew/Code/Scribe-Branches/v2.00/Utils/ScribeRecoverMail2/build/Debug/ScribeRecoverMail2.app/Contents/Frameworks/Lgi.framework/Versions/A/Lgi) 
==80518== by 0x360E: Node::Read(GFile*, unsigned int&) (in ./ScribeRecoverMail2) 
==80518== by 0x55CF: Node::ReadFolder(GFile*) (in ./ScribeRecoverMail2) 
==80518== by 0x7B61: Worker::Export(GFile*, GArray<Node*>&) (in ./ScribeRecoverMail2) 
==80518== by 0x8F7A: Worker::Main() (in ./ScribeRecoverMail2) 
==80518== by 0x142D64: ThreadEntryPoint(void*) (in /Users/matthew/Code/Scribe-Branches/v2.00/Utils/ScribeRecoverMail2/build/Debug/ScribeRecoverMail2.app/Contents/Frameworks/Lgi.framework/Versions/A/Lgi) 
==80518== by 0x47E258: _pthread_start (in /usr/lib/libSystem.B.dylib) 
==80518== by 0x47E0DD: thread_start (in /usr/lib/libSystem.B.dylib) 
==80518== Address 0x1a198900 is 0 bytes inside a block of size 24 alloc'd 
==80518== at 0x41581: malloc (vg_replace_malloc.c:266) 
==80518== by 0x3D5616: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib) 
==80518== by 0xDFADB: GFile::GFile() (in /Users/matthew/Code/Scribe-Branches/v2.00/Utils/ScribeRecoverMail2/build/Debug/ScribeRecoverMail2.app/Contents/Frameworks/Lgi.framework/Versions/A/Lgi) 
==80518== by 0x8E4E: Worker::Main() (in ./ScribeRecoverMail2) 
==80518== by 0x142D64: ThreadEntryPoint(void*) (in /Users/matthew/Code/Scribe-Branches/v2.00/Utils/ScribeRecoverMail2/build/Debug/ScribeRecoverMail2.app/Contents/Frameworks/Lgi.framework/Versions/A/Lgi) 
==80518== by 0x47E258: _pthread_start (in /usr/lib/libSystem.B.dylib) 
==80518== by 0x47E0DD: thread_start (in /usr/lib/libSystem.B.dylib) 

Кажется, что Valgrind жалуется нормального повседневного поведения. Эти блоки все еще выделены, и доступ находится внутри блоков памяти, начиная и заканчивая. Так почему же валгринд жалуется?

Эта программа рушится на окнах, поэтому я построил ее на Mac, чтобы отбросить ее и увидеть, где все идет не так. До сих пор много предупреждений об ошибках внутри блока, но ничего сомнительного, как «писать в свободную память» или что-то еще. Я совершенно смущен.

PS, работающий с последней стабильной версией valgrind v3.7.0, скомпилирован и установлен на той же машине, что и я. Я давно использую valgrind и никогда не видел такого сообщения.

+0

Как выглядит GFile :: Read? Кажется, что адрес относится к целевой памяти (буфер GFile), в то время как его исходные данные недопустимы. –

+0

Привет, Франк, функция этой функции доступна здесь: http://lgi.svn.sourceforge.net/viewvc/lgi/trunk/src/mac/General/GFile.cpp?revision=393&view=markup – fret

+0

Я видя такой же отказ valgrind в системе Linux: http://stackoverflow.com/questions/30985301/valgrind-reporting-invalid-read-entirely-within-still-allocated-block – Novelocrat

ответ

1

Кажется, что Valgrind жалуется на нормальное повседневное поведение

Действительно это делает, и что, как представляется, ошибка в Mac OSX версии Valgrind.

Вы можете попытаться создать небольшой тестовый пример и сообщить об этом разработчикам Valgrind.

Вы также можете попробовать address sanitizer и посмотреть, что он сообщает.

+0

«Малый тестовый корпус» ... ну, у текущего есть тестовый файл 1gb :( – fret

+0

На самом деле, я могу, вероятно, создать и запустить на Linux ... это может быть конец работы с ошибками, связанными с Mac, связанными с Valgrind. Я также попробую дезинфицирующее средство и посмотрю, как это происходит , – fret

Смежные вопросы