我正在实现一个与 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 上会产生正确的输出。我认为不同的编译器有不同的方式来管理分配的内存,有人可以更详细地解释这个问题吗?
谢谢您
最佳答案
malloc
不会初始化分配的内存,因此分配的空间可能在任意位置有零,从而给出不同的字符串长度。
关于c - 未初始化的 malloc 内存在不同环境中的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48177106/