MSVC是否保证未初始化的本地字符数组中的空字符?

时间:2015-08-25 22:27:39

标签: c++ visual-studio-2010

我在visual studio 2010工作,我收到了一个项目,原来的程序员在函数和方法中做了大约一半的时间

    TCHAR some_local_variable[size] = {0};

另一半时间,他没有初始化阵列:

    TCHAR some_local_variable[size];

我很清楚第一个赋值的作用,但我想知道MSVC编译器是否在第二种情况下保证索引0处的空字符。 我测试了这个,第一个字符设置为0,然后是垃圾按预期,但我不确定这是否有保证?

其次,即使保证空字符(或者如果它不是,只需将第一个字符设置为0),是否有任何充分的理由用0初始化整个数组,特别是当我总是这样做时在任何字符串操作之后跟随:

    some_local_variable[size-1] = 0;

我唯一想到的是,如果操作字符串的函数没有null终止并且复制的字符数小于size-1,则可能会出现问题。例如,如果它复制了大小为5的字符并且没​​有null终止,那么我在size-1处的终止可能会将size-4中的垃圾暴露给size-2。但是,我认为大多数标准库或Win32函数都存在问题。

1 个答案:

答案 0 :(得分:1)

不,它没有。未初始化的内存位置具有随机内容。 (调试版本可能会进行一些初始化以帮助检测内存损坏,但这在发布版本中不会发生。)

除非您明确地将该内存区域初始化为某个已知值,否则不应依赖任何内存内容。

question包含有关调试版本的内存初始化的详细信息。 (我不确定列表是否完整。)