c - 未初始化的 malloc 内存在不同环境中的不同行为

标签 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 上会产生正确的输出。我认为不同的编译器有不同的方式来管理分配的内存,有人可以更详细地解释这个问题吗?
谢谢您

最佳答案

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

关于c - 未初始化的 malloc 内存在不同环境中的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48177106/

相关文章:

for 循环中 pow() 的编译器错误

c - 如何在 Visual Studio 2013 中修复 "differs in level of indirection"

java - 安卓/Java : Check if arraylist is empty and then launch another activity

c - C中的指针、字符串问题

c++ - (C++) 用其他数组的相应值替换字符串中找到的数组的任何值?

c - Pebble 秒表字体大小更改错误

c - 为什么内核有主线程

c# - 这个算法的空间复杂度是多少O(1)

java - 使用Java读取文件时如何处理新行

c++ - 关于 C++ 的简单一般问题