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 字段)如果重要的话

4

2 回答 2

1

将 for 循环中的行替换为data[i] = CSimple(rand() % 10000). 更具可读性,不是吗?

您的代码失败的原因是因为data + i不会按 i 字节而是按 i 增加数据CSimple。比如说,如果 CSimple 是 4 个字节长,那么data + i * sizeof(CSimple)数据会增加 16 个字节而不是 4 个字节。

于 2012-05-28T20:55:32.227 回答
-2

作为一个新手,你为什么不让你的生活更轻松,并使用自动为你完成艰苦工作的类型呢?

#include <vector>

const int SORT_SIZE = 20;

int _tmain(int argc, _TCHAR* argv[])
{
    std::vector<CSimple> data;

    for(int i = 0; i < SORT_SIZE; i++)
    {
        data.push_back( CSimple(rand() % 10000) );
    }
于 2012-05-28T21:20:28.847 回答