gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:43:03 25 4
gpt4 key购买 nike

我定义了一个这样的结构:

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

提前感谢大家的帮助。

最佳答案

由于您没有在 main() 中初始化 i 指针,因此存在未定义的行为。您不能假设 queue->count 将为 0(因为您也没有初始化它),因此 front 中的 else 分支() 可能会被采用,然后将写入 x 并导致未定义的行为。

事实上,您传递了一个未初始化的指针,这意味着它永远无法工作。如果它没有崩溃,并不意味着它是正确的。未定义的行为是未定义的。

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

关于c - Mac OS 中的指针值 - 从队列中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com