我已经定义了这样的结构:
typedef struct queue
{
int front, count;
int values[MAX];
}QUEUE;
当我试图获取队列前面的值(将其传递给变量)时,我收到一个错误:“非法指令:4”
获取值的函数是:
int front(QUEUE *q, int *x){
int r=0;
if(q->count==0) r=1;
else{
*x = q->values[q->front];
}
return r;
}
我用以下内容初始化了结构:
void initQueue(QUEUE *q){
q->front = 0;
q->count = 0;
}
实际上,这是在linux环境下编译的。
int main(){
QUEUE queue;
int *i; //i chose not to initialize with null
front(&queue, i);
printf("%d", *i);
return 0;
}
问题可能是什么原因?
PS:我已经用sudo运行了。它不显示错误,但不输出任何内容。提前感谢大家的帮助。
答案 0 :(得分:0)
您有未定义的行为,因为您未初始化i
中的main()
指针。您不能认为queue->count
将为0(因为您也没有对其进行初始化),因此else
中的front()
分支可能会被占用,然后将通过x
写入并导致未定义的行为。
您传递非初始化指针的事实意味着它永远不会工作。如果它没有崩溃,那并不意味着它是正确的。未定义的行为未定义。
注意:即使您完全删除对front()
的调用,printf()
仍会通过对未初始化的指针执行*i
来调用未定义的行为。