什么时候c ++分配/解除分配字符串文字

use*_*215 6 c++ memory-management

在此示例中,在程序的生命周期中,字符串文字"hello"何时被分配和释放?

init(char **s)
{ 
  *s = "hello";
}
int f()
{
  char *s = 0;
  init(&s);
  printf("%s\n", s);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ork 15

字符串文字由编译器初始化为只读内存段.在运行时没有初始化或删除.

  • 编译器可能会将字符串文字的内容复制到*本地存储*(堆栈)中,从而进行一些初始化。为了防止这种情况,我将变量声明为 `const static char text[] = "hello";`。此外,只读段也可以是可执行段。 (2认同)
  • 字符串文字可能位于只读内存中,但这取决于编译器。因此,修改字符串文字(就像问题中的代码一样)具有未定义的行为,但它可能会起作用。 (2认同)