2015-09-27 63 views
0

我有一个valgrind的误判告诉我,条件跳转或移动取决于未初始化的值。告诉valgrind一个值实际上是初始化的

的代码是这样的:

//from GenerateTexture: 
glGenTextures(1, (GLuint*)&texture_list[texture_pos]); 
return texture_list[texture_pos++]; 

// Usage in another function 
if(texture == 0) 
    InitTexture(); // First line of function: texture = GenerateTexture(); 
if(texture == 0) // This is what valgrind complains about 
    return; 

我正在与Windows主机在Ubuntu的虚拟机代码的有关于OGL库一些早期的警告,所以我认为的valgrind不能正确处理虚拟机。但是我知道纹理已经正确初始化,并且不想被valgrind在每次使用texture时感到困扰。

如何告诉valgrind(也许通过代码注释)这是一个误报?我知道抑制文件,但是我需要添加每个使用纹理的函数,所以我正在寻找一个“更干净”的替代方案。

编辑:作为请求的MCVE:

#include <GL/gl.h> 
#include <SDL/SDL.h> 
#include <iostream> 

int main(int argc, char** argv){ 
    SDL_Init(SDL_INIT_VIDEO); 

    const SDL_VideoInfo* video = SDL_GetVideoInfo(); 

    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); 
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); 
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); 
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); 
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); 

    SDL_SetVideoMode(800, 600, video->vfmt->BitsPerPixel, SDL_OPENGL); 

    GLuint tex; 
    glGenTextures(1, &tex); 
    if(tex) std::cout << "1337"; 

    return 0; 
} 

Valgrind的在垂直框显示:

==2304== Conditional jump or move depends on uninitialised value(s) 
==2304== at 0xD97E21C: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0x400B49: main (test.cpp:46) 
==2304== Uninitialised value was created by a heap allocation 
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so) 
==2304== 
==2304== Conditional jump or move depends on uninitialised value(s) 
==2304== at 0xD5939E4: crHashIdPoolAllocId (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD593AF7: crHashtableAllocRegisterKey (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD97E207: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0x400B49: main (test.cpp:46) 
==2304== Uninitialised value was created by a heap allocation 
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so) 
==2304== 
==2304== Conditional jump or move depends on uninitialised value(s) 
==2304== at 0xD5939FC: crHashIdPoolAllocId (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD593AF7: crHashtableAllocRegisterKey (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD97E207: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0x400B49: main (test.cpp:46) 
==2304== Uninitialised value was created by a heap allocation 
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so) 
==2304== 
==2304== Conditional jump or move depends on uninitialised value(s) 
==2304== at 0xD593A27: crHashIdPoolAllocId (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD593AF7: crHashtableAllocRegisterKey (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD97E207: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0x400B49: main (test.cpp:46) 
==2304== Uninitialised value was created by a heap allocation 
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so) 
==2304== 
==2304== Conditional jump or move depends on uninitialised value(s) 
==2304== at 0xD593A29: crHashIdPoolAllocId (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD593AF7: crHashtableAllocRegisterKey (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD97E207: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0x400B49: main (test.cpp:46) 
==2304== Uninitialised value was created by a heap allocation 
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so) 
==2304== 
==2304== Conditional jump or move depends on uninitialised value(s) 
==2304== at 0xD593A30: crHashIdPoolAllocId (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD593AF7: crHashtableAllocRegisterKey (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD97E207: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0x400B49: main (test.cpp:46) 
==2304== Uninitialised value was created by a heap allocation 
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so) 
==2304== 
==2304== Conditional jump or move depends on uninitialised value(s) 
==2304== at 0x400B52: main (test.cpp:47) 
==2304== Uninitialised value was created by a heap allocation 
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so) 
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so) 
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so) 
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so) 
+0

但低估了这一点:你至少可以评论你为什么这么做?这个问题有什么问题? – Flamefire

+0

我没有DV,但问题应该包含[MCVE](http://stackoverflow.com/help/mcve)。我们无法从这篇文章中看出代码中是否存在实际的错误。在我看来,可能有一个错误,否则你不必使用该演员。 –

+0

@ M.M:是的。然而,为此设置一个MCVE可能是一个相当长的例子,可能只会导致虚拟机中的行为(可能甚至是特定的版本)所以我只粘贴了相关部分:在调用glGenTextures后分配变量,但仍“未设置” 。我并没有要求在代码中找到一个错误,但是(如果我真的确定在我的代码中没有错误)就可以告诉valgrind关于定义的问题。所以我期待像phd这样的答案。如果我被误导,需要一个MCVE,为什么不能只发表评论? DV只能帮助任何IMO。 – Flamefire

回答

1

可以使用的valgrind MEMCHECK要求VALGRIND_MAKE_MEM_DEFINED。

请参阅http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs 和文件memcheck.h了解更多信息。然而,这给一个变量赋值的东西是不是证明 这个变量被初始化

注:如果该值被分配到 变量本身不(完全)初始化,那么“undefinedness” 将传播。 因此,在定义纹理变量之前,您应该仔细检查它是否被有效地初始化/定义。

你可能会首先运行--track-origins = yes以获取更多信息 关于未定义值来自何处。

或者,您可以使用valgrind + vgdb和gdb交互式搜索根本原因 ,检查例如的定义。 texture_list。

请参阅 http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver了解更多信息。

+0

非常感谢!我无法找到使用谷歌。轨道起源是一个很好的提示。我检查了这个case,并且GLuint = unsigned,而texture_list是一个无符号数组。代码的原始作者(它在OpenSource项目中)并不想将ogl头部包含在头部中。 – Flamefire

相关问题