我有一个接受指针的函数,并返回一个enum
取决于与该指针一些条件:如何确保函数不会获取垃圾指针?
my_enum function(char* prt)
{
/* function body*/
if (condition1) return enum1;
if (condition2) return enum2;
if (condition3) return enum3;
if (condition4) return enum4;
else return enum5;
}
我有另一个功能,其还接受一个指针,调用my_function
和反应所获得的值:
void another_function(char* ptr)
{
my_enum result = function(ptr);
if (result == MY_VALUE) std::cout<<"OK"<<endl;
}
我正在运行Valgrind检查内存泄漏。上面的代码导致以下错误:
Conditional jump depends on an uninitialized variable.
事实上,这是可能的未初始化的指针传递给函数功能。
我的问题是:处理这种情况的最佳方式是什么(除了使用引用)?我无法确定每个使用该代码的人都会初始化他将传递给该函数的指针。如果指针指向一些垃圾(我正在检查它是否为空指针),我无法在内部检查函数。
我应该忽略这样的错误吗?如果它们毫无用处,Valgrind为什么要麻烦告诉我他们呢?必须有我能做的事情。
你确定它是初始化的指针吗? valgrind消息的结果就像'result'未初始化一样,如果'function'退出而没有返回,就会发生这种情况。 – delnan
您的返回枚举的函数仍然可以有一个分支,其中枚举未初始化。我们无法看到导致valgrind错误的代码。 – stefaanv
我相信*函数*不会退出而不返回。我不能发布完整的代码,但有一个* if-else *语句。 – user2738748