在此示例中,使用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;
...
答案 0 :(得分:1)
在此示例中,使用Malloc或Calloc分配内存有什么区别?
假设a
和b
均为正且a * b
不会溢出,calloc(a, b)
和malloc(a * b)
之间的区别仅在于{{1}将分配的内存初始化为全零位。没什么。
使用Calloc可以中断内存,但是使用Malloc可以!
无论您使用的是calloc
还是calloc()
,无论程序是否吵闹,您的程序都有故障。您为malloc()
分配了内存,但随后又取消了对其NO
指针的引用,而没有先将其分配为指向有效对象。无论使用哪种分配功能,结果都是不确定的。