它在动态分配变量之前初始化变量有什么不同

Ani*_*kar 1 c malloc

请看代码:

struct something* s = malloc(sizeof(struct something));
s = NULL;
Run Code Online (Sandbox Code Playgroud)

在这里,我s在定义时动态分配内存.然后将其初始化为NULL.

struct something* s = NULL;
s = malloc(sizeof(struct something));
Run Code Online (Sandbox Code Playgroud)

在这里,我使用NULL值定义并初始化它,然后将其内存分配分配(更改)到动态内存.

它还有什么不同之处?如果我错了,请纠正我.

哪一个是不好的做法,如果有的话?

Sou*_*osh 7

这里我在定义内容时动态分配内存,然后将其初始化为NULL.

不你不是.通过做

struct something* s = malloc(sizeof(struct something));
s = NULL;
Run Code Online (Sandbox Code Playgroud)

你实际上是丢弃了NULL分配给内存的唯一指针(通过设置它)malloc().你在这里泄漏记忆.

如果你想将分配的内存初始化为0,你可以做类似的事情

memset(s,0, sizeof(struct something));
Run Code Online (Sandbox Code Playgroud)

但是,你的第二个片段

struct something* s = NULL;          //define and initialize to NULL
s = malloc(sizeof(struct something));  //allocate memory
Run Code Online (Sandbox Code Playgroud)

是完全有效和正确的方法.你在这里

  • 定义s和分配NULL,以防止未经初始化使用.
  • s在使用之前分配内存

使用后不要忘记记忆free().

完美!!