在函数中使用后,将char指针设置为NULL

时间:2019-04-22 18:27:12

标签: c pointers null malloc

在C语言中,我有一个函数,其中将字符串作为参数,然后在使用它之后销毁它,因为我必须在无限循环中调用它,并且5分钟后,进程返回了-1073741819(0xC0000005)

这是我的职能

void renderText(char *text) {
    //use it here and then destroy it.
    *text = NULL; //not working!
    text = NULL; //also not!
    text[0] = '\0'; //also not!
}

将参数传递为:

renderText("Hello There!");
  

我可以使用malloc()函数创建一个字符串,然后可以传递给上面的函数,但是我必须无限次调用它,以便在调用指针时该函数中可以使用任何方法将其为NULL通过引用。

2 个答案:

答案 0 :(得分:6)

此行

text[0] = '\0';

将取消引用指针text,但您已经

text = NULL;

所以这可能会导致段错误。你可以

free(text);

,但最好由调用者负责。这使得该函数对于动态分配了 的参数或调用者想再次使用的参数更加有用。

但是您的具体用法是

renderText("Hello There!");

,并且字符串文字不能更改:它是只读的。因此,您的函数绝对不能尝试杀死传递的参数。

答案 1 :(得分:2)

这里

void renderText(char *text) { }

textchar*类型的,并且在使用它之后,不要将text指向任何无效的存储位置,始终最好使用NULL进行初始化,这意味着它指向一无所有。因此,

text = NULL;

仅在此API中正确,因为它无法反映调用函数中的NULL分配,因为text是在此函数中本地创建的。 这个

*text = NULL;

无效,因为*textchar类型,而NULL等效于(void*)0

text[0] = '\0';

如果根据上述声明进行错误处理,则可以正常工作。对于例如

if(strlen(text) != 0) { /* something is there inside text */ }