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

  • 本文关键字:变量 动态分配 初始化 c malloc
  • 更新时间 :
  • 英文 :


请参阅代码:

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

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

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

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

它还有什么不同?如果我哪里错了,也请纠正我。

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

在这里,我动态地将内存分配给s,同时定义并将其初始化为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()纪念品。

完美!!

这会创建对内存中某个位置的引用。

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

您正在销毁引用。

s = NULL;

第一个代码中的问题是,如果malloc成功,您将获得一个地址,但在之后立即删除它-使用null而不是您获得的地址。

如前所述,你的第二次机会会更好。一定要处理内存分配不成功的情况,因为如果分配失败,你会得到意想不到的行为。关于未初始化的指针-建议您在内存分配(以及分配成功检查)之后立即初始化数据。

E.G:

 struct something* s = malloc(sizeof(struct something))
 //alocating memory
 if(!s) return OUT_OF_MEMORY;
 //memory allocation failed, returning a proper messege
 /*DO SOMTHING WITH s*/

相关内容

  • 没有找到相关文章

最新更新