[英]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分配內存有什么區別?
假設a
和b
均為正數且a * b
不會溢出,則calloc(a, b)
和malloc(a * b)
之間的區別僅在於calloc
將分配的內存初始化為全零位。 沒有其他的。
使用Calloc可以中斷內存,但是使用Malloc可以!
不管您使用calloc()
還是malloc()
,您的程序都會出錯,無論程序是否吵鬧 。 您為NO
分配了內存,但是隨后取消引用了它的person
指針,而沒有首先將其分配為指向有效對象。 無論使用哪種分配功能,結果都是不確定的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.