在调用malloc后,我得到一个意想不到的大小

时间:2013-07-04 17:17:44

标签: c++ size malloc

我有这段代码:

char* str = (char*)malloc(27);
int num = strlen(str);

我已经在debag模式下运行程序,我已经看到num等于40.为什么?为什么不27?

1 个答案:

答案 0 :(得分:7)

因为malloc()没有初始化分配的内存(即使它确实将它归零,也没有帮助),strlen()取决于是否存在空终止字符。当遇到空终止字符时,strlen()将停止计数 ,在这种情况下,它在分配的内存之后是13个字节(在某处不应该读取)。 strlen()未获取sizeof数组或从malloc()(或任何其他动态分配函数)分配的字节数。例如:

char buf[32] = "hello";   /* Implicit null terminating character after 'o'. */
assert(5 == strlen(buf)); /* It does not equal 32. */