gpt4 book ai didi

c++ - 告诉 valgrind 一个值实际上被初始化了

转载 作者:行者123 更新时间:2023-11-28 02:20:10 24 4
gpt4 key购买 nike

我有一个 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 VM 中运行代码,并且有一些关于 OGL 库的早期警告,因此我假设 valgrind 无法正确处理 VM。但是我确实知道纹理已正确初始化,并且不想在每次使用 texture 时都被 valgrind 打扰。

我如何告诉 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;
}

VBox 中的 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)

最佳答案

您可以使用 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,检查例如的定义纹理列表。

http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver获取更多信息。

关于c++ - 告诉 valgrind 一个值实际上被初始化了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32811047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com