gpt4 book ai didi

c++ - 段错误 wrt NULL 指针 C++

转载 作者:行者123 更新时间:2023-12-04 08:19:21 25 4
gpt4 key购买 nike

我正在尝试使用循环链表来解决约瑟夫斯问题。但是在创建函数中,我遇到了关于指向链表节点的 NULL 指针的段错误。谁能解释为什么会出现段错误?谢谢你!

#include <iostream>
using namespace std;
struct llnode
{
int data;
bool life;
struct llnode *ptr;
};
typedef struct llnode *llptr;
int create(llptr &L, llptr F, int n, int c=1)
{
if(!L)
{
L = new(llnode);
if(c=1)
F = L;
L->data = c;
L->life = true;
L->ptr = NULL;
}
if(c==n)
{
L->ptr = F;
return 0;
}
create(L->ptr,F,n,1+c);
return 0;
}
int execution(llptr L,int n)
{
if(n==2)
{
cout<<"The Winner is: "<<L->data<<endl;
return 0;
}
L = L->ptr;
while(L->life == false)
L = L->ptr;
L->life = false;
while(L->life == false)
L = L->ptr;
execution(L,n-1);
return 0;
}
int main()
{
llptr L,F;
int n;
cout<<"Enter the Number of Players"<<endl;
cin>>n;
create(L,F,n,1);
execution(L,n);
return 0;
}

最佳答案

您的问题就在这里:

llptr L, F;
什么是 LF指向?截至目前,它们都是 Wild Pointer。也就是说,您没有任何保证。因此,当您将它们传递给 create() 时并检查 if(!L) ,它会是假的,因为 L不是 nullptr。
因此,您将尝试取消引用 LL->ptr = F; .但是, L指向一些垃圾地址。这是未定义的行为。
确保将所有指针初始化为 nullptr .

关于c++ - 段错误 wrt NULL 指针 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65565506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com