我正在编写一个具有修改后的双向列表处理的射击机制的游戏机:
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/