信じられないほど厄介なエラーをたまたまデバッグしました。自分の PC (Windows 7 x64、MinGw) で、C プログラムはmemcmp
配列メンバーを比較するときに を使用して配列を正常にソートしました。
私の関数はバブルソートアルゴリズムを使用し、そのスケルトンは次のようになります。
void array_sort(ArrayMap *array, char direction) {
make sure direction is +1 or -1 only
define some variables
for(...) {
for(...) {
cmpres = memcmp(elm1, elm2, sizeOfElement);
if (cmpres!=0&&cmpres!=direction)
{
SWAP here
}
}
}
今、私の PC では、memcmp
が返され、別の PCでは-1
、0
およびが返されました。これを私と比較すると、ソートが完全に間違っていました。1
-5
0
5
direction
しかし、戻り値の絶対値 (つまりサイズ) はmemcmp
実際には何を意味するのでしょうか。
メモリ ブロックの内容間の関係を示す整数値を返します。ゼロ値は、両方のメモリ ブロックの内容が等しいことを示します。ゼロより大きい値は、両方のメモリ ブロックで一致しない最初のバイトが、unsigned char 値として評価されたかのように、ptr2 よりも ptr1 に大きい値があることを示します。ゼロ未満の値はその反対を示します。
サイズについては言及されていません。彼らは +-1 について間違っていないように、ゼロより大きいと言っているだけです。