gpt4 book ai didi

c - 指针指针混淆

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:14 24 4
gpt4 key购买 nike

编辑:队列是 2d 的原因是因为我需要一个命令指针,以便 cmd 可以等于 NULL。空 ==(无效 *)。这就是我感到困惑的地方,也是我来这里的原因。 :)

为了帮助尝试找出我在 Python 中遇到的另一个问题,我正在用 C 实现一个小测试程序。虽然我知道一点,但显然我很困惑。我正在尝试编写一个用于异步 USB 传输的简单队列。队列有些不对劲,因为从队列中弹出的每个命令都是相同的。如果我将 queue[1024][0] 写成 queue[1024][1],则命令会在两个不同的命令之间交替,程序会在 command_thread_main 中崩溃。显然它没有注意到 cmd 应该为 NULL。据我所知,将 [1] 更改得更高没有任何效果。有什么提示吗?

typedef struct Command {
void (*cb) (char *data, int size);
unsigned char *data;
int size;
} Command;

struct Command queue[1024][0];

int queueEnd = 0;
int queueStart = 0;

static void queue_push(void (*cb), unsigned char *data, int size) {
if (queueEnd >= 1024)
return;
queue[queueEnd]->cb = cb;
queue[queueEnd]->data = data;
queue[queueEnd]->size = size;
queueEnd++;
}

struct Command * queue_pop(void) {
if( queueStart > queueEnd )
return NULL;
return queue[queueStart++];
}

static void *command_thread_main(void *arg) {
struct Command *cmd;
while (!do_exit) {
if(locked) continue;
locked = 1;
cmd = queue_pop();
if(cmd != NULL)
cmd->cb(cmd->data, cmd->size);
}
}

最佳答案

我认为您有一个错误需要先修复。您有一个二维命令数组,并将其中一个维度设置为零!

struct Command queue[1024][0];

当您访问队列时,您似乎将其视为一维结构。您是否应该将其声明为:

struct Command queue[1024];

关于c - 指针指针混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1086020/

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