C++ 打电话给malloc后,我得到了一个意外的大小
我有以下代码:C++ 打电话给malloc后,我得到了一个意外的大小,c++,size,malloc,C++,Size,Malloc,我有以下代码: char* str = (char*)malloc(27); int num = strlen(str); 我已经在debag模式下运行了这个程序,我看到num等于40。为什么?为什么不是27?因为它不初始化分配的内存(即使它将其归零,在这里也没有帮助),并且取决于空终止字符的存在strlen()将仅在遇到空终止字符时停止计数,在本例中,它是分配内存后的13个字节(读取不应该的位置)strlen()无法获取数组的大小或从malloc()(或任何其他动态分配函数)分配的字节数。例
char* str = (char*)malloc(27);
int num = strlen(str);
我已经在debag模式下运行了这个程序,我看到num等于40。为什么?为什么不是27?因为它不初始化分配的内存(即使它将其归零,在这里也没有帮助),并且取决于空终止字符的存在strlen()
将仅在遇到空终止字符时停止计数,在本例中,它是分配内存后的13个字节(读取不应该的位置)strlen()
无法获取数组的大小或从malloc()
(或任何其他动态分配函数)分配的字节数。例如:
char buf[32] = "hello"; /* Implicit null terminating character after 'o'. */
assert(5 == strlen(buf)); /* It does not equal 32. */
在C++中,应该使用新的,而不是MALLC。另外,我建议使用std::string或std::vector,而不是动态数组。每当库函数出现异常行为时,您的第一个想法应该是“我是如何错误地使用它的?”而不是“库已损坏”。如果您查看了这两个函数的文档,答案将是显而易见的。请注意,如果他使用
calloc
,strlen
的结果将是0,这也不是OP所期望的。