我有一個接受指針的函數,並返回一個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