请看代码:
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值定义并初始化它,然后将其内存分配分配(更改)到动态内存.
它还有什么不同之处?如果我错了,请纠正我.
哪一个是不好的做法,如果有的话?
这里我在定义内容时动态分配内存,然后将其初始化为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().
完美!!