为什么在使用具有大_Size的memset时出现访问写入冲突?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在使用具有大_Size的memset时出现访问写入冲突?相关的知识,希望对你有一定的参考价值。
所以我的C ++代码中有一个类型为_Scalar
的变量,该变量可以采用许多不同的类型(int,double ...)。
因此,我在模板类中使用new运算符初始化了指针。当我想分配内存时,可以在模板类的构造函数中使用memset函数。
//At the beginning of the class
_Scalar* m_data;
//In the constructor
m_data = new _Scalar;
memset(m_data, 0, sizeof(_Scalar) * m_size)
例如,对于m_size
为15,一切正常。但是,当m_size
为10000时,出现访问写入冲突错误。我在Visual Studio中观看了m_data
变量,这就是我得到的:
那么问题是什么以及如何解决?我是C ++的新手。
答案
我怀疑您真的想要这个:
m_data = new _Scalar[m_size];
for (int i = 0; i < m_size; i++)
m_data[i] = ;
或者正如其他人指出的那样,就足够了:
m_data = new _Scalar[m_size]();
取决于标量对象内部的内容,内存集可能是安全的,也可能是不安全的。我已经看到memset用于将包含分配了内存的成员的对象“归零”一些失败。
一种更好的方法可能是让Scalar的构造函数只是确保所有成员都为零。取决于您是否可以控制该类的代码。
另一答案
当然,它实际上尚未分配,大小为0
_Scalar* m_data;
//..
//In the constructor
m_data = new _Scalar[m_size]; // allocated as m_size size of _Scalar
memset(m_data, 0, sizeof(_Scalar) * m_size)
//..
delete m_data;
以上是关于为什么在使用具有大_Size的memset时出现访问写入冲突?的主要内容,如果未能解决你的问题,请参考以下文章