gpt4 book ai didi

c - 在动态分配变量之前初始化变量有什么区别

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:32 24 4
gpt4 key购买 nike

请看代码:

struct something* s = malloc(sizeof(struct something));
s = NULL;

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

struct something* s = NULL;
s = malloc(sizeof(struct something));

在这里,我用 NULL 值定义和初始化它,然后分配(更改)它的内存分配给动态内存。

它还有什么区别?如果我在某处有误,请纠正我。

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

最佳答案

Here I am allocating memory to s dynamically while defining and then initializing it to NULL.

不,你不是。通过做

struct something* s = malloc(sizeof(struct something));
s = NULL;

您实际上是在丢弃指向由 malloc() 分配的内存的唯一指针(通过将其设置为 NULL)。你在这里泄漏内存。

如果你想初始化分配的内存到,比如说,0,你必须做类似的事情

memset(s,0, sizeof(struct something));

但是,你的第二个片段

struct something* s = NULL;          //define and initialize to NULL
s = malloc(sizeof(struct something)); //allocate memory

是完全有效和正确的方法。给你

  • 定义 s 并分配 NULL,以防止未初始化的使用。
  • 在使用前为s分配内存

不要忘记在使用后free() 内存。

完美!!

关于c - 在动态分配变量之前初始化变量有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29139108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com