c++ - 什么时候删除由 (char *) 作为函数参数指向的内存?

标签 c++ char parameter-passing

代码 1:

void foo(char * text) {}

foo("Test");

据我所知,这将会发生:

  • 内存分配给“测试”

  • 指针被创建并将其值复制到 (char * text pointer),因此 (char * text) 指向内存中的位置,其中“Test”是(最好说,在第一个字符上"测试")

  • 函数执行完后,销毁了指向“Test”开头的指针(char * text),这不是内存泄漏吗?

  • 问题是,“Test”什么时候被删除,什么时候函数只销毁指针

做某事不是更好吗?像那样? :

char * _text = "Test";
foo(_text);
delete[] _text;

最佳答案

您可以将字符串文字视为代码的一部分。它们不是动态分配的,它们具有所谓的“静态存储持续时间”,这意味着它们在程序运行期间一直存在,并且不需要被释放(实际上,一定不能被释放)。

delete[] 不是用 new[] 创建的东西总是错误的,所以你的第二个代码片段有未定义的行为。

关于c++ - 什么时候删除由 (char *) 作为函数参数指向的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4377860/

相关文章:

c++ - 使用 SFINAE 根据类模板参数的类型更改类中调用的函数

c++ - 我应该使用过滤图或子图还是其他东西?

java - 如何在C中读取字符串的第一个字符

php - WHERE IN 语法的搜索参数 SQLSRV_QUERY

c++ - 调用对象类型 'void (B::*)(int)' 不是函数或函数指针

c++ - 函数调用顺序错误

python - 嵌入式 Python 应用程序中 Py_Finalize 期间的 fatal error

c++ - 连接纯字符和字符串?

c# - 如何从字符串中删除剩余的不需要的字符

postgresql - DO 脚本中的 PSQL 命令行参数