- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的 MWE 给出了一个奇怪的地址 sanitizer 报告:
#include <vector>
class A {
public:
A(){}
~A(){}
};
class B{
public:
B(){
m_grid = new A();
}
~B(){ delete m_grid;}
A * m_grid = nullptr;
std::size_t n;
};
int main(){
std::vector<B> l;
l.emplace_back(B{});
}
AsanMangler 报告:
=================================================================
==14729==ERROR: AddressSanitizer: attempting double-free on 0x60200000eff0 in thread T0:
#0 0x7f4207f6e6af in operator delete(void*) (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x586af)
#1 0x40126f in B::~B() /src/main.cpp:113
#2 0x401efb in void std::_Destroy<B>(B*) /usr/include/c++/4.9/bits/stl_construct.h:93
#3 0x401caa in void std::_Destroy_aux<false>::__destroy<B*>(B*, B*) /usr/include/c++/4.9/bits/stl_construct.h:103
#4 0x4019c8 in void std::_Destroy<B*>(B*, B*) /usr/include/c++/4.9/bits/stl_construct.h:126
#5 0x401546 in void std::_Destroy<B*, B>(B*, B*, std::allocator<B>&) /usr/include/c++/4.9/bits/stl_construct.h:151
#6 0x40130f in std::vector<B, std::allocator<B> >::~vector() /usr/include/c++/4.9/bits/stl_vector.h:424
#7 0x401057 in main /src/main.cpp:170
#8 0x7f42075d9a3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20a3f)
#9 0x400ea8 in _start (/src/MAIN+0x400ea8)
0x60200000eff0 is located 0 bytes inside of 1-byte region [0x60200000eff0,0x60200000eff1)
freed by thread T0 here:
#0 0x7f4207f6e6af in operator delete(void*) (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x586af)
#1 0x40126f in B::~B() /src/main.cpp:113
#2 0x401045 in main /src/main.cpp:124
#3 0x7f42075d9a3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20a3f)
previously allocated by thread T0 here:
#0 0x7f4207f6e1af in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x581af)
#1 0x4011ea in B::B() /src/main.cpp:111
#2 0x401020 in main /src/main.cpp:124
#3 0x7f42075d9a3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20a3f)
SUMMARY: AddressSanitizer: double-free ??:0 operator delete(void*)
==14729==ABORTING
编译:
/usr/bin/g++ -std=c++11 -ftree-vectorize -ftree-vectorizer-verbose=0 -fmessage-length=0 -Wno-enum-compare -g -fsanitize=address -o MAIN main.cpp
有人知道问题出在哪里吗?这里有一些非常可疑的东西,编译器错误或奇怪的 std 库??,到目前为止,我还没有对 ubuntu vivid 中的 c++ 4.9 头文件做任何事情。或者它可能是地址 sanitizer 的误报?
我安装了 clang-3.6 和
它也因以下行而崩溃:
clang++ -std=c++14 -fmessage-length=0 -Wno-enum-compare -g -o MAIN main.cpp
最佳答案
没有什么奇怪的。指针没有移动
,指针将被浅层复制,然后您将获得双重释放。您可以使用 std::unique_ptr
,而不是原始指针,或者编写移动构造函数,这会将 nullptr
分配给指针。
B(B&& rhs) : m_grid(rhs.m_grid), n(rhs.n)
{
rhs.m_grid = nullptr;
rhs.n = 0;
}
关于c++ - 奇怪的双重自由腐败(GCC 4.9.2,Ubuntu Vivid 上的 Clang3.6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32947603/
一个特定文档不会更新,而同一查询会更新我查询的任何其他 _id: Category.findOneAndUpdate( {_id : req.params.id}, {parent :
我正在使用 ifstream 读取文件头。编辑:我被要求放置完整的最小程序,所以就在这里。 #include #include using namespace std; #pragma pack(
typedef struct { int *info; } row; struct { row* head; int len; int size; } list; in
在索引 block 时我在 debug.log 中有错误: 2016-11-14 15:14:52 UpdateTip: new best=000000000000038ad111e773453f17
我是一名优秀的程序员,十分优秀!