我正在编写一个具有修改后的双向列表处理的射击机制的游戏机:

tank.h:

typedef
struct Shoots
{
    struct Shoot* head;
    struct Shoot* tail;
}shootsList;

typedef
struct Shoot
{
    short coords[2];
    short vect;
    std::chrono::time_point<std::chrono::system_clock> start;
    struct Shoot* next;
    struct Shoot* prev;
}shoot_t;


在tank.cpp中,我有一个过程

void manageShoots(char arena[][35], char hitmap[][35])
{
    shoot_t* sht = shoots.head;
    while(sht->next != NULL) sht = sht->next; (...)


程序收到信号SIGSEGV,分段故障。
在C:... \ TS \ tank.cpp:46:
while(sht-> next!= NULL)sht = sht-> next;

在使用manageShoots之前的main.cpp中,我已初始化列表:

shootsList shoots;
shoots->head = NULL;
shoots->tail = NULL;


我想念什么吗?

最佳答案

如果列表为空,即shoots.head == NULL,则sht-> next会导致SIGSEGV。
循环应如下所示:

while (sht != NULL)
{
    // do processing, if any
    sht = sht->next;
}

关于c++ - 搜索(经修改的)双向列表时的SIGSEGV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41661574/

10-11 01:09