編輯:原因隊列是2d是因爲我需要一個命令的指針,以便cmd可以等於NULL。 NULL ==(void *)。這是我感到困惑的地方,爲什麼我來到這裏。 :)指針混淆指針
爲了幫助嘗試找出我在Python中遇到的另一個問題,我正在C中實現一個小測試程序。雖然我知道一點,但顯然我很困惑。我正在嘗試寫一個簡單的隊列用於異步USB傳輸。隊列中的某些內容不正確,因爲從隊列中彈出的每個命令都是相同的。如果我將隊列[1024] [0]寫入隊列[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);
}
}
爲什麼數組2D?那看起來不對 – Hasturkun 2009-07-06 08:47:25