繁体   English   中英

结构的动态链接列表中的内存分配

[英]Memory Allocation in Dynamic Linked List of Structs

在此示例中,使用Malloc或Calloc分配内存有什么区别?
使用Calloc可以中断内存,但是使用Malloc可以!
我的示例类似于(但具有许多值):

在此处输入图片说明

如果代码错误,该怎么办?

typedef struct {
    int ID, age;
} person;

typedef struct {
    person *person;
    struct NO *next;
} NO;

...   // with calloc, the memory breaks
      // with  (NO*)malloc(sizeof(NO))  it´s fine

NO *p1, *px1, *px2;

px2 = (NO*)calloc(1, sizeof(NO));
p1 = px2;
px2->person->ID = 1; px2->person->age = 30;
px2->next = NULL;
px1 = px2;

px2 = (NO*)calloc(1, sizeof(NO));
px2->person->ID = 2; px2->person->age = 20;
px2->next = NULL;
px1->next = px2;

...

在此示例中,使用Malloc或Calloc分配内存有什么区别?

假设ab均为正数且a * b不会溢出,则calloc(a, b)malloc(a * b)之间的区别仅在于calloc将分配的内存初始化为全零位。 没有其他的。

使用Calloc可以中断内存,但是使用Malloc可以!

不管您使用calloc()还是malloc() ,您的程序都会出错,无论程序是否吵闹 您为NO分配了内存,但是随后取消引用了它的person指针,而没有首先将其分配为指向有效对象。 无论使用哪种分配功能,结果都是不确定的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM