2011-03-14 11 views
1

予期しないことに、最小値まで整数値をラップする問題が発生しています。予期しない整数値のラッピング

-858993460にラップする前の整数の値は15です。私は手動でそれが必要な値を変更する場合は、16(

while(ArrayLocation2 < EmpArray2Size) 
{ 
    GivenEmployees[(*EmployeeSize++)] = curr2; 

    prev2 = curr2; 
    if(ArrayLocation2 < EmpArray2Size) 
    { 
     curr1 = EmpArray2[ArrayLocation2]; 
    } 
    ArrayLocation2++; 

    if((ArrayLocation2 >= EmpArray2Size) || (prev2.HourlyRate > curr2.HourlyRate)) 
    { 
     subFiles++; 
    } 
} 

からhttp://codepad.org/tZerX1wC

(それは大きなものではなく、ここではコピーされます):ここでは

は、この問題を引き起こしているコードです17、18、など)それは期待どおりに動作します。

サイズは "int Size = 21;"と宣言されています。違いがある場合は、現在のメソッド&サイズに渡されます。

なぜこれが起こっているのかについての詳細な回答は可能でしょうか?

必要に応じてさらに詳しい情報を提供できます。

ありがとうございました。

+0

どの整数ですか?コードにはかなりの可能性があります。どのように初期化されていますか?どちらのシステムで作業していますか? 0xCCCCCCCCはプログラムやシステムに重要な意味を持ちますか? –

+0

コードの矛盾をお詫びします。ラッピングする整数は "EmployeeSize"で、OPで説明したように宣言されています。このメソッドを使用するたびに、0にリセットされ、15をヒットするたびに1ずつインクリメントされ、ラップするたびにインクリメントされます。私は64ビットWindows 7システム、Intel i5で作業しています。 – Matt

+0

どこを参照して渡していないことを確認しますか? – deek0146

答えて

1

値を返す*EmployeeSize++発現は、EmployeeSizeによって指さ、次いでをインクリメントポインタ、指し示された項目ではありません。試してみてください(*EmployeeSize)++

+0

Geekasaurさん、ありがとうございました。 – Matt

2

問題は、ポインタを増やしていて、ランダムな領域を指してしまうことです。

おそらく書くためのもの:

GivenEmployees[(*EmployeeSize)++] = cur2; 

括弧はここでは必要です。彼らはオリジナルでは不要です。コメントから


:ラッピングは「EmployeeSize」であると私はOPで説明してきたように宣言されている

整数。 (それは元のOPの「サイズ」と呼ばれることを除いて)

ただし、であるように見える:

void this_function(..., int *EmployeeSize, ...) 
{ 
    ...code... 
} 
+0

シンプルなエラーを指摘してくれてありがとう、私はあなたに両方の答えを与えることができればいいと思うが、それはあなたがドロージョナサンにオタクだと思う。 – Matt

+0

@Matt:実際には、私のタイムスタンプは06:31:46で、Geekosaurのタイムスタンプは06:32:02です(私の場合は16秒前です)。回答が提示される順序は、投票数が同じであればランダムです。 Geekosaurは私よりも多くのポイントを必要とするので、今は変更しないでください。 –

0
GivenEmployees[(*EmployeeSize++)] 

トラブルのような匂い。

GivenEmployees[(*(EmployeeSize++))] 

以下のように解析されます。Postfixのインクリメントは参照解除よりも優先されます。 したがって、ポインタをインクリメントして逆参照します。 'EmployeeSize'は配列へのポインタですか?