C ++访问冲突对象数组

问题描述 投票:0回答:2

我是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字段)

c++ arrays visual-c++ memory-management access-violation
2个回答
1
投票

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

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


-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) );
    }
© www.soinside.com 2019 - 2024. All rights reserved.