在调用malloc之后,我得到了一个意外的大小



我有这个代码:

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

我在debag模式下运行了这个程序,我看到num等于40。为什么?为什么不27?

因为malloc()不会初始化分配的内存(即使它将其归零,在这里也无济于事),而strlen()取决于是否存在null终止字符。当strlen()遇到空终止字符时,它将仅停止计数,在这种情况下,它在分配的内存之后13个字节(读取不应该读取的地方)。CCD_ 4不从CCD_ 6(或任何其它动态分配函数)获得CCD_。例如:

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

相关内容

  • 没有找到相关文章