Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打电话给malloc后,我得到了一个意外的大小_C++_Size_Malloc - Fatal编程技术网

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所期望的。