当我们调用(char*)malloc(sizeof(char))为一个字符串分配内存时,是否初始化了?如何初始化?
When we call (char*)malloc(sizeof(char)) to allocate memory for a string, is it initialized? How to initialize?
char* str = (char*)malloc(100*sizeof(char));
strcpy(str, ""); //Does this line initialize str to an empty string?
调用第 1 行后,分配的内存是否包含垃圾?调用 2 号线后呢?
是的,malloc
returns 未初始化的内存,是的,您的第二行代码将您的内存初始化为空字符串。
After calling line 1, does the allocated memory contain garbage?
它可以包含任何内容,因为 malloc
根据标准不需要初始化内存,因此在大多数实现中也不应该。它很可能只包含该内存的前一个 "user" 放在那里的任何数据。
What about after calling line 2?
使用该指令,您将 "byte value" 0 的 [=11=]
字符复制到已分配内存的第一个字节。其他一切都没有受到影响。您也可以完成 str[0] = '[=12=]'
甚至 *str = '[=13=]'
。所有这些选项都使 str
指向 "empty string"。
另请注意,由于您标记了问题 C
而不是 C++
,因此从 malloc
转换 return 值是多余的。
malloc 只是提供一个内存位置并创建一个指向它的指针,returns 那个。初始化不会发生。如果相同的内存之前被其他东西占用,你可能会得到一个垃圾值。
char* str = (char*)malloc(100*sizeof(char));
strcpy(str, ""); //Does this line initialize str to an empty string?
调用第 1 行后,分配的内存是否包含垃圾?调用 2 号线后呢?
是的,malloc
returns 未初始化的内存,是的,您的第二行代码将您的内存初始化为空字符串。
After calling line 1, does the allocated memory contain garbage?
它可以包含任何内容,因为 malloc
根据标准不需要初始化内存,因此在大多数实现中也不应该。它很可能只包含该内存的前一个 "user" 放在那里的任何数据。
What about after calling line 2?
使用该指令,您将 "byte value" 0 的 [=11=]
字符复制到已分配内存的第一个字节。其他一切都没有受到影响。您也可以完成 str[0] = '[=12=]'
甚至 *str = '[=13=]'
。所有这些选项都使 str
指向 "empty string"。
另请注意,由于您标记了问题 C
而不是 C++
,因此从 malloc
转换 return 值是多余的。
malloc 只是提供一个内存位置并创建一个指向它的指针,returns 那个。初始化不会发生。如果相同的内存之前被其他东西占用,你可能会得到一个垃圾值。