【发布时间】:2016-03-02 04:52:12
【问题描述】:
我有一个 C 语言列表,其中包含以下数据结构:
typedef struct node{
int in_id;
struct node *next;
} Node;
typedef struct List{
Node* head;
Node* tail;
}List;
如果列表被占用,我的查看列表前面的功能可以正常工作,但是,如果列表为空并且我在列表中查看,我会收到分段错误。这是完全可以理解的。但是,我一直在尝试想一种方法来防止这种情况或规避分段错误。
Node* front(List *q){
Node *temp;
temp = NULL;
if(q->head == NULL && q->tail == NULL){
printf("front function: this is empty \n");
return temp;
}
else{
temp = q->head;
return temp;
}
}
第一个想法是,如果我需要在 if(front(Node)->value == x) 中使用 front,如果它为空,我会收到分段错误。但是,我通过在前面放置一些我需要测试的东西来缩短它,if( something == TRUE && front(Node)->value == x)。
我还考虑做的是malloc() 一些动态内存到前面的temp,并分配我正在测试的相关字段,如果head && tail == NULL 是假的,我知道该值是假的。但是,我觉得这是内存泄漏,因为我无法free() temp。
我有没有更好的方法来处理窥视这个队列并且如果它是空的则不会出现分段错误?
【问题讨论】:
-
TL;DR
if(q == NULL) { /* List is empty */ return NULL;} -
if(!isEmpty(aList) && front(aList)->value == x) -
@BLUEPIXY - 这就是我将其短路并避免分段错误的方法。但是有没有办法处理
front(),这样如果我调用它并且它是空的,我就不会遇到分段错误? -
front可能必须返回一个NULL,所以不能单独使用front(aList)->value。 -
@BLUEPIXY - 有道理,我认为真的没有办法不单独使用它。谢谢。