在动态分配变量之前初始化变量有什么区别
What difference it makes to initialize a variable before allocating it dynamically
请看代码:
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()
使用后的记忆。
完美!!
这将创建对内存中某处的引用。
struct something* s = malloc(sizeof(struct something));
你正在破坏引用。
s = NULL;
你的第一个代码中的问题是,如果 malloc 成功,你会得到一个地址,但之后立即删除它 - 通过分配 null 而不是你得到的地址。
如前所述 - 你的第二种方法更好。
确保你处理了内存分配不成功的情况——因为如果失败你会得到意想不到的行为。
关于未初始化的指针 - 建议您在内存分配(和分配成功检查)后立即初始化数据。
例如:
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*/
请看代码:
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()
使用后的记忆。
完美!!
这将创建对内存中某处的引用。
struct something* s = malloc(sizeof(struct something));
你正在破坏引用。
s = NULL;
你的第一个代码中的问题是,如果 malloc 成功,你会得到一个地址,但之后立即删除它 - 通过分配 null 而不是你得到的地址。
如前所述 - 你的第二种方法更好。 确保你处理了内存分配不成功的情况——因为如果失败你会得到意想不到的行为。 关于未初始化的指针 - 建议您在内存分配(和分配成功检查)后立即初始化数据。
例如:
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*/