1

プログラムは長いです(フルバージョンは次のとおりです:http://pastebin.com/cvg1eSJ1)、(sample.txtは次のようになります:http://pastebin.com/hWihPpSj、これはINPUTファイルであり、別のコマンドラインです引数は出力ファイルです。)しかし、私は「2番目のポインタリスト」を扱う部分を投稿しています。基本的に47ほどのアイテムのリストがあり、特定の範囲外のアイテムを2番目のリストに追加する必要があります。これは私が最初に値を保存する場所です。コードをクリーンアップするためだけに「tempAddress」を使用します。現在の住所の値を取得して確認し、一致する場合は2番目のリーディングリストに追加します。

    for (i; i < numElements; i++) {
        tempAddress = firstReadingList++;
        if ((double) *tempAddress > plusOutlier || (double) *tempAddress < minusOutlier) {
            *secondReadingList++ = *tempAddress;

            numOutliers++;
            printf("%d ", *tempAddress);
        }
    }

後で、この読み取りリストを別の関数でファイルに書き込む必要があります。値を出力しましたが、最後の値だけが正しくありません。理由はわかりません。これが私がそれらをファイルに書き込むコードです(この場合、tempAddressは新しい変数です)

for (i; i < numElements; i++) {
    tempAddress = (outlierList + i);
    printf("%d ", *tempAddress);
    fprintf(out, "%d ", *tempAddress);
}

最初の関数の出力は次のとおりです。

752 843 840 848 752 850 753(これは正しいです)

2番目のコードsnippitはこれを出力します

752 843 840 848 752 850 577(577は正しくありません)

私は何か間違ったことをしましたか?私はまだポインタに比較的慣れていません。関数間のどの時点でもsecondListPointerを変更しません。

4

1 に答える 1

1

を呼び出す前に、 1つget_outliersにメモリを割り当てます。 int

int *outlierList = malloc(sizeof *outlierList);

int numOutliers = get_outliers(dataPointer, numReadings, outlierList, average, stdDev, STDDEV_SCALAR);

ただし、複数の外れ値が存在する可能性があります。次に、割り当てられたメモリの外部に書き込み、未定義の動作を呼び出して、予期しない結果をもたらします。ここでは、一部のデータのみが破損しています。

于 2012-11-24T22:14:48.577 に答える