我有一个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)
但低估了这一点:你至少可以评论你为什么这么做?这个问题有什么问题? – Flamefire
我没有DV,但问题应该包含[MCVE](http://stackoverflow.com/help/mcve)。我们无法从这篇文章中看出代码中是否存在实际的错误。在我看来,可能有一个错误,否则你不必使用该演员。 –
@ M.M:是的。然而,为此设置一个MCVE可能是一个相当长的例子,可能只会导致虚拟机中的行为(可能甚至是特定的版本)所以我只粘贴了相关部分:在调用glGenTextures后分配变量,但仍“未设置” 。我并没有要求在代码中找到一个错误,但是(如果我真的确定在我的代码中没有错误)就可以告诉valgrind关于定义的问题。所以我期待像phd这样的答案。如果我被误导,需要一个MCVE,为什么不能只发表评论? DV只能帮助任何IMO。 – Flamefire