【发布时间】:2011-01-19 00:03:02
【问题描述】:
当你使用指针在堆上分配动态内存时,
char *buffer_heap = new char[15];
它将在内存中表示为:
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««þþþ
为什么末尾没有 NULL 终止字符,而不是 ýýýý««««««««þþþ?
【问题讨论】:
-
首先,谁说这甚至是一个字符串?对于编译器,您只需要 15 个原始字节的内存。如果你想要一个字符串,使用
std::string。那么这个数据是什么?这只是发生在那里的任何事情。大多数编译器实际上会用调试数据或其他信息填充这些数据,因此当您使用未初始化的数据时,它可能会得到一致的模式。 -
我不知道为什么人们不赞成这个,这是一个完全有效的问题。仅仅因为 OP 误解了某事并不意味着我们应该为此惩罚他。
-
相关:stackoverflow.com/questions/2029651/… stackoverflow.com/questions/958549/dynamically-allocated-char 一辈子都找不到完全相同的副本,但我发誓有一个...
-
@dmckee:这里是另一个相关的:stackoverflow.com/questions/370195/…。在我回答之前,我可能应该想到谷歌“site:stackoverflow.com 0xCD 0xFD”,但这仍然不是一个完全正确的骗局。
-
@GMan:+1,很高兴看到有人支持 n00bs;缺乏知识并不是一种罪过,而不必费心去了解它并为此感到骄傲是:)
标签: c++ visual-c++ dynamic-memory-allocation