0

私は C++ の初心者で、オブジェクトの配列を作成しようとしています。私は次のようなコードを使用します

const int SORT_SIZE = 20;

int _tmain(int argc, _TCHAR* argv[])
{
    CSimple * data;
    data = new CSimple[SORT_SIZE];

    for(int i = 0; i < SORT_SIZE; i++)
    {
/*Access violation here*/   *(data + i * (sizeof(CSimple))) = *(new CSimple(rand() % 10000));
    }

私のサイクルでは、i = 5 でアクセス違反が発生します。sizeof(CSimple) は 8 です (int フィールドは 1 つしかありません)。

4

2 に答える 2

1

for ループ内の行を に置き換えますdata[i] = CSimple(rand() % 10000)。はるかに読みやすいですね。

コードが失敗した理由は、data + iデータを i バイトではなく i でインクリメントするためCSimpleです。たとえば、CSimple の長さが 4 バイトの場合、data + i * sizeof(CSimple)データは 4 ではなく 16 バイト増加します。

于 2012-05-28T20:55:32.227 に答える