簡體   English   中英

簡單分配中的分段錯誤

[英]Segmentation Fault in simple assignment

我正在用 C 創建一個優先級隊列結構。

結構:

#define MAXCOUNT 10
typedef int array[MAXCOUNT+1];

typedef struct {
    int Count;
    array items;
} PriorityQueue;

初始化函數:

void Initialize(PriorityQueue *PQ)
{
    PQ->Count=0;
}

主要的:

int main (void) {
  PriorityQueue* PQ;
  Initialize(PQ);

  Insert(2, PQ);
  Insert(3, PQ);
  Insert(5, PQ);
  Insert(1, PQ);
  Insert(12, PQ);
  Insert(6, PQ);
  Insert(10, PQ);

  printPQ(PQ);

  return 0;
}

問題是,當我運行它時,我遇到了分段錯誤。 使用gdb,我發現它是在初始化函數上拋出的。 讓我感到困惑的是,一個簡單的int分配如何會引發分段錯誤。

讓我感到困惑的是,一個簡單的int分配如何會引發分段錯誤。

嗯,先看看!!!

在您的Initialize()函數中,當您嘗試訪問PQ ,它未分配有效內存。 在取消引用之前,您需要為PQ分配適當的內存。 否則,嘗試訪問無效內存會調用未定義的行為

宣言:

PriorityQueue* PQ;

聲明的變量(其類型和名稱,以及間接地在其存儲器中的位置),但對其進行初始化。 所以當你傳遞值時

Initialize(PQ);

被調用的函數使用一個隨機值作為內存地址——賦值

PQ->Count=0;

將零放入任意內存位置,很高興您進入無效/禁止位置。

PriorityQueue PQ; 相反(即刪除指針類型),並在main中的每個其他實例中使用&PQ 在這種情況下,對優先級隊列使用自動變量就足夠了。

否則,您需要分配內存(使用malloc和 c.),將該內存的位置分配給PQ ,並記住在完成后調用free

PriorityQueue 變量 PQ 沒有為其分配任何內存空間,分段錯誤的原因是您試圖將變量存儲在未分配的空間(或您無權訪問的內存位置)中。 要為變量 PQ 獲取內存空間,請使用 malloc() 函數。

PQ = (PriorityQueue*) malloc(sizeof(PriorityQueue));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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