c - c 中的全局计数器未按预期工作

标签 c

我有一些正在处理的队列代码。我试图使用全局 int 来跟踪队列的大小。

#define MAX 100

int size=0;
int gEnqueue=gDequeue=0;

int enqueue()
{
     gEnqueue++;
     if( size == MAX )
         return QUEUE_FULL;
/* snip the actual queue handling */
     size++;
     return 0;
}

int dequeue()
{
     gDequeue++;
     if(!size)
         return QUEUE_EMPTY;

/* snip actual queue handling */
     if(size)
         size--;
     return 0;
}

当然还有更多的代码,但是太多了,无法发布。

发生的事情是大小卡在我设置的最大值。这两个函数都被调用了偶数次。如果我转储队列,我可以看到其中只有 3 个项目。

什么会导致这个问题?

编辑 #1:使代码示例与我实际编写的代码相匹配

这不是线程化的。

编辑 #2:我是个白痴,应该这样做而不是假设。 我错了,甚至调用了 enqueue() 和 dequeue()。

self 提醒,使用真实指标而不是猜测。

最佳答案

如果您不能使用调试器,我建议在两个函数中添加打印语句以显示大小相等,然后在运行程序后检查输出。通常在查看打印日志时问题很明显。

关于c - c 中的全局计数器未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1313485/

相关文章:

C 将数组的指针更改为更大的数组

c++ - 在 C 中包装 vector<Mat> 时出现段错误

c - C 文件的问题

c++ - 解释 C 中函数的变量声明

c - 如何阻止此代码卡在错误的输入上?

c - 在3D网格上以最小的点成本有效地找到等成本点

c - 默认 `make` 行为从何而来?

c - 启动时自动运行程序

c - C 中的运算符优先级

c - 如何查看 C 中数组中的元素是否为空?