I 그 포인터에 관련된 특정 조건에 따라서 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;
}
I는 포인터를 받아 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.
, 함수 함수로 초기화되지 않은 포인터를 통과 할 수있다.
내 질문 :이 상황을 처리하는 가장 좋은 방법은 무엇입니까 (참조 대신 사용). 그 코드를 사용할 모든 사람이 함수에 전달할 포인터를 초기화 할 수 있는지 확인할 수 없습니다. 포인터가 일부 쓰레기를 가리키는 경우 내 함수를 확인할 수 없습니다 (나는 그것이 NULL 포인터인지 여부도 확인합니다).
이러한 오류를 무시해야합니까? 그들이 쓸모가 없다면, 왜 Valgrind는 그들에 대해 나에게 알리는 것을 괴롭히는가? 내가 할 수있는 일이 있어야 해.
초기화 된 포인터가 맞습니까? valgrind 메시지는'result'가 초기화되지 않은 것처럼 읽 힙니다.'function'이 반환하지 않고 종료 될 때 발생할 수 있습니다. – delnan
열거 형을 반환하는 함수는 여전히 열거 형을 초기화하지 않은 분기를 가질 수 있습니다. 우리는 valgrind 오류를 일으키는 코드를 보지 않고는 알 수 없습니다. – stefaanv
* 함수 *가 반환하지 않고 종료하지 않을 것이라고 확신합니다. 전체 코드를 게시 할 수는 없지만 * if-else * 문이 있습니다. – user2738748