簡體   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