C ++新char [size]和new char [size]()之间的区别

时间:2016-12-11 04:13:10

标签: c++ memory-management dynamic-memory-allocation c-strings

tldr;为基本数组分配内存与括号之间没有它们有什么区别? e.g。

char * text = new char[size];

VS

char * text = new char[size]();

全文:

我今天遇到了一个奇怪的问题,我写的是一些代码。我创建了一个包含cstring成员变量text的类。

Class SomeClass
{
   private:
      char * text;
      ...
}

所述类的构造函数将使用动态分配的内存初始化文本,如此

text = new char[size];

运行时,我的程序会提示用户输入,将输入存储在cstring中,然后将其显示给用户。问题是,当我使用cout向用户显示cstring时,垃圾会出现在字符串的末尾。当我使用调试器逐步执行程序时,错误消失了,cstring将正常打印。问题只出现在运行程序时,而不是在使用调试器时出现。

在确保我的cstring具有适当的空终止字符后,为用户输入分配了足够的内存,检查了数组边界以及许多其他内容,我最后通过在分配方括号后添加括号来解决问题cstring的内存如此

text = new char[size]();

为什么这会解决我的问题?为基本数组分配内存与括号之间有没有它们之间的区别是什么?

1 个答案:

答案 0 :(得分:1)

感谢Igor Tandetnik和M.M.在评论中。括号将数组中的字符初始化为0而不是垃圾。这意味着cout将在遇到的第一个0处停止打印字符,而不是打印字符串中包含的所有垃圾。