瓦尔格林德给出"Invalid write of size 8"空析构函数
Valgrind gives "Invalid write of size 8" over an empty destructor
我有一个声明的a:
std::map<unsigned int, MyClass> *myMap;
这个映射是在a的构造函数中创建的
myMap = new std::map<unsigned int, MyClass>;
类MyClass基本上是一个用一些getter/setter存储一些数据的结构。MyClass中没有任何指针或新实例,只有一对枚举值、一个无符号int和一个bool。所以MyClass析构函数是空的。
另一方面,在A的析构函数中,我正在删除映射:
A::~A(){
if(myMap!=NULL){
delete myMap;
myMap = NULL;
}
}
在这里,Valgrind告诉我"地址0x4c389b0在一个大小为48的块内有16个字节可用[PID:6077]">通过删除行。
此外,在MyClass析构函数中,即使为空,我也会得到"大小为8的无效写入[PID:6077]">
我不明白问题是什么。我一直认为在向量或映射上调用delete会自动调用每个元素对应的析构函数,而在这种情况下,析构函数没有任何作用。
有什么帮助吗?
编辑:添加了A的构造函数:
A::A(unsigned int someValue){
m_someValue = someValue;
initializeMap();
}
void A::initializeMap(){
myMap = new std::map<unsigned int, MyClass>;
for(unsigned int i=1; i<=20; i++)
mymap->insert(std::make_pair(i,
MyClass(i)));
}
此外,MyClass构造函数:
SvAvailabitlity::SvAvailabitlity(unsigned int index){
m_index = index; //unsigned int
m_Flag = false; //bool
m_enumData1 = NOT_OK; //enum MyEnum
m_enumData2 = NOT_OK; //enum MyEnum
}
其中MyEnum定义为:
typedef enum {
OK = 0,
NOT_OK = 1,
} MyEnum;
顺便说一句,我不理解反对票。有人也可以解释一下,以防我用这个问题冒犯了别人,我认为根据stackoverflow规则,这个问题是正确的。
问题是违反三条规则。您的对象的任何副本都将导致双倍免费。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 大于65535的C++数组[size]引发不一致的溢出
- Usages of std::move
- 为什么(-1)%vector::size()总是返回0
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- 二叉搜索树瓦尔格林德错误"Invalid read of size 8"
- 瓦尔格林德:在字符[]到标准::向量迁移之后"Invalid write of size 1"<char>
- 如何修复'Size of list( a class) is unknown or zero error'和"声明语法错误"?
- 瓦尔格林德给出"Invalid write of size 8"空析构函数
- C/C++:在32位机器上的sizeof(short)、sizeof(int)、sizeof(long)、size of
- 瓦尔格林德错误"Invalid read of size 4"
- 为什么瓦尔格林德会给出"Invalid read of size 1"错误?
- 为什么我会得到"cannot allocate an array of constant size 0"?
- "size of the largest possible object on the target platform" size_t
- 为什么铸造长可以解决"warning: cast to pointer from integer of different size"?
- 瓦尔格林德"Invalid write of size 8"
- typedef Size() of openCV
- "error: request for member ‘size’ in ‘a’, which is of pointer type"但我不认为这是一个指针
- Size of LONG_MAX Cygwin