我是否定义了一个全局指针(char*)
。然后给出一个常量字符串的地址。这个地址是否会被释放。例如:
static char *str;
const char * test()
{
str = "hello world";
return str;
}
Q1:现在在任何地方使用test
得到的地址内容是否安全。
Q2:如果测试
在DLL中。通过其他程序在外部使用是否安全
Q3:如果安全的话。当我将另一个 const 字符串重新分配给变量 str
时。旧的const字符串会被释放吗
最佳答案
如果执行以下操作,则可以在任何地方使用 foo() 的结果。但是,您不应该修改或释放它。如果此代码是 DLL 或库的一部分,则无关紧要。
const char * foo() {
return "hello";
}
// This is identical.
const char * foo() {
const char *x = "hello";
return x;
}
如果你想能够修改,你可以这样做。请注意,每次调用 foo()
都将引用同一 block 内存,因为 x
是静态的。请注意,在这里,您可以修改 x
,但您仍然不应该释放它。
char * foo() {
static char x[] = "hello";
return x;
}
如果您希望能够释放 foo()
的结果,则必须使用 malloc()
分配空间。
关于c - 是全局内存中的局部常量字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14027352/