C检查指针是否有效?

Nik*_*ika 0 c++ pointers

我在使用C++中的有效指针时遇到问题.我在不同的线程中使用一个对象,所以我不能只将指针设置为NULL并返回.这是我正在尝试的:

int main()
{
    char *ptr = new char[1024]; //assume PTR = 0x12345678
    changePtr(ptr);  //after calling this,
                     //ptr is not NULL here.
    return 0;
}

void changePtr(char *ptr)
{
    delete [] ptr; //ptr = 0x12345678
    ptr = NULL; //ptr = NULL
}
Run Code Online (Sandbox Code Playgroud)

如何ptr为两个函数更改为NULL?

Mik*_*scu 7

将changePtr的签名更改为:

void changePtr(char **ptr)
{
   delete [] *ptr; //ptr = 0x12345678
   *ptr = NULL; //ptr = NULL
}
Run Code Online (Sandbox Code Playgroud)

并使用以下方式调用:

changePtr(&ptr);
Run Code Online (Sandbox Code Playgroud)


hyd*_*yde 6

在C++中,使用引用参数:

void changePtr(char *&ptr) {
    delete [] ptr; //ptr = 0x12345678 
    ptr = NULL; //ptr = NULL 
}
Run Code Online (Sandbox Code Playgroud)

在C中,您需要将指针传递给指针,这基本上与不太漂亮的语法相同.

您无需更改调用代码.但是你必须在调用时给出一个可修改的变量作为参数,不能给出例如NULL或者nullptr你不能做的&NULL.