我是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字段)如果重要
答案 0 :(得分:1)
将for-loop中的行替换为data[i] = CSimple(rand() % 10000)
。更多的阅读,不是吗?
您的代码失败的原因是data + i
不会将数据增加i个字节,而是增加i CSimple
的数据。比方说,如果CSimple是四个字节长,那么data + i * sizeof(CSimple)
会将数据增加16个字节而不是4个。
答案 1 :(得分:-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) );
}