不初始化的malloced内存在不同环境中的不同行为

时间:2018-01-09 21:45:09

标签: c arrays char malloc

我正在实施与在C.中使用动态分配相关的程序 在Visual Studio 2017和其他IDE(Dev C ++,Codeblocks等)上测试相同的代码我有不同的行为:

size_t newDim = 9;
char *p = malloc((newDim + 1) * sizeof(char));
p[newDim] = '\0';
printf("%d\n", strlen(p));

Visual Studio上printf()的输出是:9
其他IDE:3有时4 但是当我用dim-1字符填充数组时,相同的printf()会在其他IDE上生成正确的输出。我认为不同的编译器有不同的管理分配内存的方法,有人可以更详细地解释问题吗? 谢谢

1 个答案:

答案 0 :(得分:6)

malloc没有初始化分配的内存,因此分配的空间可能在任意位置都有零,从而产生不同的字符串长度。