[英]Value of struct variable changes after malloc of other variable of same struct
所以我試圖初始化一個圖的節點。 問題是,至少在我所知的范圍內,變量node->edges_capacity
值從2更改為某個隨機int並沒有明顯的原因。
而且,當我使用CLion的調試模式時,它會按預期打印2!
我對malloc
做錯了嗎?
typedef struct node {
int id;
int degree;
int edges_capacity;
struct node **edges;
} Node;
Node *node_create(int id) {
Node *node = (Node *) malloc(sizeof(Node *));
if (node == NULL)
exit(1);
node->id = id;
node->degree = 0;
node->edges_capacity = 2;
node->edges = (Node **) malloc(node->edges_capacity * sizeof(Node *));
node_debug(node); // prints a random int for node->edges_capacity instead of 2
return node;
}
void node_debug(Node *node) {
printf("id:%d degree:%d capacity:%d\n", node->id, node->degree, node->edges_capacity);
}
更改此行:
Node *node = (Node *) malloc(sizeof(Node *));
至 :
Node *node = malloc(sizeof(Node));
當您聲明node
為指向Node
類型而不是Node *
的指針時。
另外,請參見此鏈接 ,了解為什么不malloc
的結果。
這行:
Node *node = (Node *) malloc(sizeof(Node *));'
有幾個問題。
Node
分配足夠的空間,而不是pointer to a Node
的pointer to a Node
。 void*
,可以將其分配給任何其他指針。 強制轉換返回值只會使代碼混亂,使int更加難以理解,調試和維護。 以下發布的代碼正在寫入程序不擁有的堆內存中的區域。 這是未定義的行為,可能導致段故障事件。 您注意到該未定義行為的一個方面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.