簡體   English   中英

指向結構的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM