[英]C - Segmentation fault on function with pointers
我有一個結構類型的 6 個元素的列表:
struct entry
{
int value;
struct entry *next;
};
我正在嘗試通過為每個值成員分配一個隨機 int 來創建一個函數來初始化這六個元素。
void initializeList(struct entry *l_p)
{
while(l_p!=_END)
{
l_p->value=rand()%999;
l_p=l_p->next;
}
}
在 main 中調用此函數時, *l_p
指向列表的第一個元素。 _END
是一個全局常量,定義如下:
struct entry const *_END=(struct entry *)0;
現在,每次我運行我的代碼時,我都會得到這個:
分段錯誤(核心轉儲)
進程返回 139 (0x8B)
我知道這意味着我正在嘗試訪問我不允許訪問的一部分內存,但我不知道如何修復我的代碼。 另外,我很確定問題是由initializeList
引起的,因為如果我刪除它並手動初始化列表的每個元素,程序運行順利。
對不起大家,我的錯。 我一直試圖弄清楚很長時間,現在,經過 5 分鍾的休息,我可以看到由於我的列表沒有初始化並且元素沒有相互鏈接,我無法運行順序掃描它。 再說一次,我的錯,我還是個菜鳥,有很多東西要學:)
其實這里有一個錯誤:
l_p->value=rand()%999;
l_p=l_p->next;
您尚未為 l_p 分配內存,然后嘗試在導致分段錯誤的受限區域中分配值。
你可以試試這個
void initializeList(struct entry *l_p)
{
l_p=(struct entry *)malloc(sizeof(struct entry));
l_p->next=NULL;
struct entry *pointer,* back=l_p;
for(int i=0;i<5;i++)
{
pointer=(struct entry *)malloc(sizeof(struct entry));
pointer->next=NULL;
back->next=pointer;
}
for(int i=0;i<6;i++)
{
l_p->value=rand()%999;
l_p=l_p->next;
}
}
我創建了 6 個節點,並在前 9 行中將它們連接起來。
然后在下一行中為它們中的每一個賦值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.