count = 0;
for (j_v = 0; j_v < csize; j_v++)
{
unsigned short code, fact, insize;
code = charcode[j_v];
fact = n;
insize = num;
int ii = ((code * fact) % insize);
index_s[ii]++; count++;
}
if (count != csize)
{
count = 1;
}
//addup
count = 0;
for (int k = 0; k < num; k++)
{
for (int ip = 0; ip < 20; ip++)
{
if (index_s[k]==ip)
{
p[ip]++;
break;
}
}
count += index_s[k];
}
if (count != csize)
{
count = 1;//debug1
}
count = 0;
for (int kk = 1; kk < 20; kk++)
{
count += p[kk];
}
if (count > csize)
{
count = 1;
}
這是一個執行緒中的代碼,按道理應該永遠執行不到 DEBUG1那行才對,所有的變數都是區域變數沒有其它地方參考,charcode是一個unsigned short 型別的陣列
uj5u.com熱心網友回復:
找到原因了,ii變數超范圍了,這就更加迷惑了,因為insize變數僅為113,而ii的值竟然為6萬多?,把型別改成 unsigned int就好了.....................................................................................uj5u.com熱心網友回復:
代碼不完整,沒辦法判斷,一開始num取值多少uj5u.com熱心網友回復:
運算益處了?添加 ASSERT(xx >= 0 && xx < yy) 斷言看
uj5u.com熱心網友回復:
num很小,小于1000,num的值在運算中不改變
uj5u.com熱心網友回復:
能解決就好了uj5u.com熱心網友回復:
搞不懂VC編譯器玩的什么套路,同樣的運算在MDK里是正確的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/35260.html
標籤:進程/線程/DLL
