1

配列のコピーを作成しようとしています。これが「悪いコード」であることはわかっていますが、これやその他の低レベルのものを多用するチュートリアルから取得しています。なんらかの理由で実行時エラーが発生し、それがどこから来ているのか、なぜなのかわかりません。誰でも助けることができますか?ありがとう。

#include <iostream>

void copy_array(void *a, void const *b, std::size_t size, int amount)
{
    std::size_t bytes = size * amount;
    for (int i = 0; i < bytes; ++i)
        reinterpret_cast<char *>(a)[i] = static_cast<char const *>(b)[i];
}

int main()
{
    int a[10], b[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    copy_array(a, b, sizeof(b), 10);

    for (int i = 0; i < 10; ++i)
        std::cout << a[i] << ' ';
}
4

1 に答える 1

1

この式sizeof(b)は、配列内の要素の数ではなく、配列のサイズをバイト単位で返します。これにより、コピー関数がスタック フレームを上書きし、実行時エラーが発生します。代わりに使用sizeof(b[0])して、個々の要素のサイズを取得します。配列内の要素の数を取得したい場合は、このように 2 つの組み合わせを使用できます。

copy_array(a, b, sizeof(b[0]), sizeof(b) / sizeof(b[0]));
于 2013-05-22T01:27:18.157 に答える