有人可以向我解释创建带有和不带有malloc的结构之间的区别。什么时候应该使用malloc以及什么时候应该使用常规初始化?
例如:
struct person {
char* name;
};
struct person p = {.name="apple"};
struct person* p_tr = malloc(sizeof(struct person));
p_tr->name = "apple";
两者之间的真正区别是什么?什么时候将一种方法用于其他方法?
如果我们假设两个示例都在函数内部,则在:
struct person p = {.name="apple"};
C实现会自动p
为该函数分配内存,并在函数执行结束时(或者,如果该语句位于函数中嵌套的块内,则在该块执行结束时)释放内存。在以下情况下很有用:
malloc
可能更好。阈值视情况而定。)在:
struct person* p_tr = malloc(sizeof(struct person));
p_tr->name = "apple";
程序显式请求对象的内存,并且程序通常应free
在完成对象时释放该内存。在以下情况下很有用:
malloc
比自动对象为分配提供更多的内存。)请注意,使用struct person p = {.name="apple"};
初始化name
成员,"apple"
并将所有其他成员初始化为零。但是,使用malloc
并分配给p_tr->name
它的代码不会初始化其他成员。
如果struct person p = {.name="apple"};
出现在函数外部,则它将创建一个具有静态存储持续时间的对象。它会在程序执行期间存在。
相反struct person* p_tr = malloc(sizeof(struct person));
,最好使用struct person *p_tr = malloc(sizeof *p_tr);
。对于前者,对p_tr
require的更改需要在两个地方进行编辑,这使人有机会犯错。对于后者,p_tr
仅在一个位置更改类型仍然会导致请求正确的大小。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句