[英]Pointer to a struct
我試圖更多地了解指針,並且在此示例中遇到了麻煩。
typedef struct{
int areaCode;
int streetNumber;
}Address;
Address *addr;
addr->areaCode = 10000;
printf("%d\n", addr->areaCode);
我遇到了細分錯誤,似乎無法理解原因。
addr是指向Address結構的指針,因此我也嘗試過:
*addr->areaCode = 10000;
並且還得到了“間接要求指針操作數”,有什么想法嗎?
Address *addr;
您只聲明了一個指針addr
,但它指向未知的地方。 您沒有為其分配內存空間。
要修復它,請更改為
Address *addr = malloc(sizeof(Address));
您尚未為結構對象分配內存。 要么使用malloc()
或簡單地聲明類型的可變Address
,而不是指針Address
(在這種情況下,訪問部件使用.
操作者而不是->
)。
Address *addr = malloc(sizeof *addr); // don't forget #include <stdlib.h>
if (addr == NULL) {
// handle failed allocation
}
// ...
free(addr); // free(addr), addr = NULL; if you like
Address addr;
addr
未初始化,因此包含一些“隨機”值。 取消引用未初始化的指針會導致...問題。
無法訪問的內存=分段錯誤。
訪問沒有分段錯誤的隨機內存會導致內存損壞。
你可以做:
Address myAddress;
Address *addr = &myAddress;
這會起作用。 首先分配,然后獲取指針。
這將產生一個指向堆棧上Address
的指針。 當心在函數末尾超出范圍。
您也可以這樣做:
Address *addr = malloc(sizeof(Address));
這在堆上分配,因此實際的Address
不會超出范圍。 但是您確實需要記住要free(addr);
否則會導致內存泄漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.