int_image
次の関数(.cppファイルから抽出)は、Visual Studioを搭載したPC(Windows7を実行するcpuIntel i7)またはAndroidフォン(P880)で実行すると、2つの異なる結果(つまり、出力バッファーが異なる)を示します。タイプ(の同義語)の2つの入力バッファーim1
とは、パラメーターとと同様に、まったく同じ(チェック済み)です。なぜこれが起こっているのか理解できません:im2
int8
char
w
h
void Compute(int8* im1,
int8* im2,
int w,
int h,
int* int_image)
{
int index = 0;
int sum;
for(int i = 0; i<h; i++)
{
// reset this column sum
sum = 0;
for(int j = 0; j<w; j++)
{
int pn;
int8 v1, v2;
v1 = im1[index];
v2 = im2[index];
pn = v1*v2;
//pn = ((int)im1[index]) * ((int)im2[index]);
sum += pn;
if (i==0)
int_image[index] = sum;
else
int_image[index] = int_image[index - w] + sum;
index++;
}
}
}
ノート。charイメージim1とim2のサイズは、整数のオーバーフローが発生する可能性があります(ただし、この種の状況は2つのコンパイラーによって同等に処理されると思いますが、現時点ではよくわかりません)。