이 valgrind 출력은 내 코드를 참조하지 않는 것 같기 때문에 저를 혼란스럽게합니다. 그리고 STL을 사용하여 쓴 여러 프로그램에서이 valgrind 출력을 보았습니다. 더 HEAP 요약 오류가 없습니다 :Valgrind '초기화되지 않은 값'종속성이 내 코드를 참조하지 않습니다.
$ valgrind -v --leak-check=full --track-origins=yes ./hellostl
...
==7989== Conditional jump or move depends on uninitialised value(s)
==7989== at 0x4017AA6: index (in /lib64/ld-2.17.so)
==7989== by 0x4007A12: expand_dynamic_string_token (in /lib64/ld-2.17.so)
==7989== by 0x4008304: _dl_map_object (in /lib64/ld-2.17.so)
==7989== by 0x400181D: map_doit (in /lib64/ld-2.17.so)
==7989== by 0x400E985: _dl_catch_error (in /lib64/ld-2.17.so)
==7989== by 0x40010EF: do_preload (in /lib64/ld-2.17.so)
==7989== by 0x40039D7: dl_main (in /lib64/ld-2.17.so)
==7989== by 0x40152B7: _dl_sysdep_start (in /lib64/ld-2.17.so)
==7989== by 0x4004E94: _dl_start (in /lib64/ld-2.17.so)
==7989== by 0x4001637: ??? (in /lib64/ld-2.17.so)
==7989== Uninitialised value was created by a stack allocation
==7989== at 0x4003961: dl_main (in /lib64/ld-2.17.so)
==7989==
==7989== Conditional jump or move depends on uninitialised value(s)
==7989== at 0x4017AAB: index (in /lib64/ld-2.17.so)
==7989== by 0x4007A12: expand_dynamic_string_token (in /lib64/ld-2.17.so)
==7989== by 0x4008304: _dl_map_object (in /lib64/ld-2.17.so)
==7989== by 0x400181D: map_doit (in /lib64/ld-2.17.so)
==7989== by 0x400E985: _dl_catch_error (in /lib64/ld-2.17.so)
==7989== by 0x40010EF: do_preload (in /lib64/ld-2.17.so)
==7989== by 0x40039D7: dl_main (in /lib64/ld-2.17.so)
==7989== by 0x40152B7: _dl_sysdep_start (in /lib64/ld-2.17.so)
==7989== by 0x4004E94: _dl_start (in /lib64/ld-2.17.so)
==7989== by 0x4001637: ??? (in /lib64/ld-2.17.so)
==7989== Uninitialised value was created by a stack allocation
==7989== at 0x4003961: dl_main (in /lib64/ld-2.17.so)
가 뭔가의 오래된 버전 사용하고 있음 가능 (예 : 컴파일러, Valgrind의 ...)?
편집 : 간단한 코드 버그를 트리거링된다
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> foo;
for (int i = 0; i < 50; ++i)
foo.push_back(i);
for (auto it = foo.begin();
it != foo.end();
++it)
{
cout << *it << endl;
}
}
다른 사용자가 코드를 재현하려고 시도 할 수있는 코드를 게시하십시오. –
불행히도 표준 플랫폼 라이브러리 코드가 모두 "깨끗합니다"는 것은 아닙니다. valgrind에 대한 억제 규칙을 설치해야 할 수도 있습니다. 'libdl'은 그러한 경우 중 하나 일 수 있습니다. –