1
void foo(const char* s) { }
foo("bar");
  1. 内存在哪里bar释放?
  2. 在函数参数中使用匿名字符串最舒适且无内存泄漏的做法是什么?(我知道不应该有魔法字符串,只是好奇。)
4

3 回答 3

4

在您的示例中,参数是一个字符串文字,它具有静态生命周期,并且永远不会被删除。

于 2012-07-18T08:06:55.587 回答
2

“bar”在数据部分中定义,地址将在您拥有的所有地方替换它。将使用指向该地址的指针调用 foo 函数。

于 2012-07-18T08:07:20.810 回答
1

bar 的内存是在编译时分配的。因此,它永远不必被释放。

c++ 二进制文件中有不同的部分。一些示例是文本(存储代码的位置)、堆栈和堆。还有一段只读静态内存。我相信这是存储字符串的地方。

由于字符串不在堆上,因此不需要释放它。

于 2012-07-18T08:06:26.850 回答