2013-11-21 2 views
-9
#include <iostream> 

func(void *ptr) 
{ 
*ptr = NULL;   
} 

int main() 
{ 
void *ptr = (int*)malloc(sizeof(int)); 
func(ptr); 
return 0; 
} 

수있는 사람이 문제를 해결할 수 있습니다. 이 포인터에 NULL을 할당하고 싶습니다. Main()에서 변경하지 마십시오.무효 포인터 오류

+0

왜 이것을해야합니까? 함수 호출에서 포인터를 변경하려면 포인터에 포인터를 전달해야합니다. 하지만 평소와 다른 점을 이해하지 못하실 까봐 두렵습니다. – JIghtuse

+0

C에서'malloc' (또는 void 포인터를 리턴하는 함수)의 리턴을 던져서는 안됩니다. C++에서만 필요합니다. –

+0

void func (void * ptr) { ptr = NULL; } int 주() { void * ptr = malloc (sizeof (int)); func (ptr); return 0; } –

답변

0

ptr = NULL;을 사용하고 malloc의 반품은 보내지 마십시오.

2

포인터가 값으로 전달됩니다. 따라서 func(void *ptr)func(void **ptr)으로 변경하고 func(&ptr)

+1

실제로 참조에서 살펴보고, – StoryTeller

+0

만약 OP가 포인터를 참조로 전달한다면 그것은 실제로'* ptr = NULL'이어야합니다 : –

+0

@StoryTeller : 당신에게 동의합니다. – David

0

C malloc가 기본적으로 void 포인터를 반환하기 때문에 캐스팅하지 마십시오. 그럼 프로그램이 잘 실행되어야합니다

+0

Noo .. 여전히 똑같은 !!! 나는 이해할 수 없다. * ptr = NULL을 할 수 없다. 아무도 exxact 이유 .. 대신 무시하고있다. –