如何修复分段错误
How do you fix a segmentation fault
当我 运行 我的代码时,我不断收到一条消息,提示我存在分段错误。我用 GDB 做了一个核心转储,它告诉我我的问题是 p = p->next; int 下面的函数。有人可以帮助我了解我做错了什么以及如何解决它吗?我知道分段错误与指针的不正确使用有关,但我不确定 p = p->next 有什么问题。
int list_size(const list_t *h) {
node_t *p = *h;
int r = 0;
do {
r += 1;
p = p->next;
} while (p);
return r;
}
在使用前检查空指针。
改变
do {
r += 1;
p = p->next;
} while (p);
至
while (p)
{
r += 1;
p = p->next;
}
当我 运行 我的代码时,我不断收到一条消息,提示我存在分段错误。我用 GDB 做了一个核心转储,它告诉我我的问题是 p = p->next; int 下面的函数。有人可以帮助我了解我做错了什么以及如何解决它吗?我知道分段错误与指针的不正确使用有关,但我不确定 p = p->next 有什么问题。
int list_size(const list_t *h) {
node_t *p = *h;
int r = 0;
do {
r += 1;
p = p->next;
} while (p);
return r;
}
在使用前检查空指针。
改变
do {
r += 1;
p = p->next;
} while (p);
至
while (p)
{
r += 1;
p = p->next;
}