Mac OS中的指针值 - 从队列中获取值

时间:2015-05-08 14:30:06

标签: c macos struct

我已经定义了这样的结构:

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运行了。它不显示错误,但不输出任何内容。

提前感谢大家的帮助。

1 个答案:

答案 0 :(得分:0)

您有未定义的行为,因为您未初始化i中的main()指针。您不能认为queue->count将为0(因为您也没有对其进行初始化),因此else中的front()分支可能会被占用,然后将通过x写入并导致未定义的行为。

您传递非初始化指针的事实意味着它永远不会工作。如果它没有崩溃,那并不意味着它是正确的。未定义的行为未定义。

注意:即使您完全删除对front()的调用,printf()仍会通过对未初始化的指针执行*i来调用未定义的行为。