C++对象数组的访问冲突

C++ access violation to array of objects

本文关键字:访问冲突 数组 对象 C++      更新时间:2023-10-16

我是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 字段)如果它很重要

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

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

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

#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) );
    }