【发布时间】:2020-08-18 13:01:26
【问题描述】:
我创建了 char arr[] 并分配给它字符串文字
char arr[] = "some string"; // arr occupies 12 chars in memory
std::cout << std::strlen(arr) << std::endl; // lenght is 11 chars + 1 null-terminator
//arr[11] is '\0'
接下来我将空终止符放入 6 个元素中
arr[5] = '\0';
std::cout << std::strlen(arr) << std::endl; // lenght is 5 chars + 1 null-terminator
- 是内存泄漏吗?
- 编译器如何知道它必须在第一个 '\0' 之后释放内存? (什么时候删除变量 arr)
- 是否可以更改此 arr 变量的长度并通知编译器它应该释放多少 删除变量?
【问题讨论】:
-
这里没有分配内存,因此不可能有泄漏。
-
@Mansoor 是的。
arr为 12 个字节。 -
是否可以更改此 arr 变量的长度并通知编译器在删除变量时应该释放多少? c++ 中的数组是在编译时固定大小。
-
内存是如何被跟踪和释放的,这一切都在幕后。它没有定义实现必须如何释放内存,只是它必须(在必须的情况下)。如果
char arr[];具有自动存储功能(例如,是一个局部变量),那么它可能会在堆栈指针更改时被“释放”,并在下次堆栈增长超过数组原来的位置时重新使用。 -
这能回答你的问题吗? c++ string allocation