代码 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/