整数在c中奇怪地增量

时间:2011-11-08 03:39:12

标签: c

好的,这是我觉得奇怪的代码片段:

printf("di consumerthread : mulai isi data, itmsg = %d\n",itmsg);                               
msgq->data[itmsg]=rec_data;
printf("di consumerthread : selesai isi data, itmsg = %d\n",itmsg); 

我发现奇怪的是输出:

di consumerthread : mulai isi data, itmsg = 42
di consumerthread : selesai isi data, itmsg = 98

itmsg变量如何在此行之后突然从42更改为98

msgq->data[itmsg]=rec_data;

有人可以告诉我如何解决这个问题以及这个奇怪输出的原因吗?

5 个答案:

答案 0 :(得分:4)

也许msgq-> data [itmsg]是itmsg的别名。它可能发生。如果你继承了这段代码,就在它上运行一个边界检查器。

答案 1 :(得分:4)

数据阵列的大小是多少?你是在写下它的界限吗?

有可能通过将rec_data分配给msgq-> data [itmsg]来覆盖itmsg。如果他们被宣布为彼此靠近,这是非常可能的。

答案 2 :(得分:0)

如果不能仅根据问题中的信息确定无疑,问题可能是多个线程同时访问相同的内存位置(msgq->data[itmsg]),而没有任何正确的同步。< / p>

答案 3 :(得分:-1)

您是否有两个或更多线程都使用itmsg变量?您的代码段中没有任何内容可以更改该变量的值,因此看起来它必须是另一个正在更改它的线程。

如果您正在使用线程,则需要使用互斥锁保护他们共享的任何数据。

答案 4 :(得分:-1)

好的,我终于找到了什么错误

很抱歉,如果我没有给你足够的信息,因为我的头很乱,要详细解释它。

所以,我要解决的是: 将所有类型的全局变量(包括itmsg)更改为static 以及将全局变量用于静态

的所有类型的过程和函数

它解决了我所有的问题!

虽然我还不知道什么是静态功能..

感谢您的帮助! :d