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