Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在函数中使用后将char指针设置为NULL_C_Pointers_Null_Malloc - Fatal编程技术网

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

在函数中使用后将char指针设置为NULL,c,pointers,null,malloc,C,Pointers,Null,Malloc,在C中,我有一个函数,其中我获取一个字符串作为参数,然后在使用它之后,我想销毁它,因为我必须在无限循环中调用它,并在5分钟后获取返回的进程-1073741819 0xC0000005 以下是我的功能: 将参数传递为: 我可以使用malloc函数来创建一个字符串,然后可以传递给上面的函数,但是我必须无限次地调用它,这样在函数中就可以在指针被引用调用时将其设为NULL 这条线 text[0] = '\0'; 将取消对指针文本的引用,但您已经 text = NULL; 因此,这可能会导致SEG故障

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

以下是我的功能:

将参数传递为:

我可以使用malloc函数来创建一个字符串,然后可以传递给上面的函数,但是我必须无限次地调用它,这样在函数中就可以在指针被引用调用时将其设为NULL

这条线

text[0] = '\0';
将取消对指针文本的引用,但您已经

text = NULL;
因此,这可能会导致SEG故障。你可以

free(text);
但最好让打电话的人负责。这使得函数对于未动态分配的参数或调用方希望再次使用的参数更有用

但是您的具体用法是

renderText("Hello There!");
并且字符串文本不能更改:它是只读的。因此,函数不能试图终止传递的参数。

此处

无效renderTextchar*文本{}

文本是char*类型,在使用它之后,为了不将文本指向任何无效的内存位置,最好使用NULL进行初始化,这意味着它不指向任何内容。因此

text=NULL

仅在该API中是正确的,因为它不反映调用函数中的NULL赋值,因为文本是在该函数中本地创建的。 这个

*text=NULL

无效,因为*text是char类型,而NULL相当于void*0

这个

文本[0]='\0'

如果错误处理符合上述说明,则可以正常工作。例如


如果strlentext!=0{/*文本中有一些内容*/}

不,我不想再使用它,只想在renderText和then中使用destroy@Robert您无法释放示例中的字符串文字。@WeatherVane因为文本不是动态分配的,我是对的?是的,无法释放非动态分配的内容是的,最好将作业留给调用者,谁知道传递给函数的是什么。请看我答案的最后一句。我刚刚展示了我已经做了三个LOC,但我一个接一个地做了这些。text=NULL;这是不正确的。它只设置传递内容的本地副本。我认为更好的iftext[0]!='\0'将是ifstrlentext!=0或仅ifstrlentext@weatherVane是真的。只有在将文本分配给NULL的APi中才可以。在这种情况下,我建议使用memcpy。例如,在将文本分配给NULL do memcpyarstuct->myString、text、strlentext+1之后;假设struct是参数&char数组是该结构的成员。
free(text);
renderText("Hello There!");