Visual Studio没有向我解释任何内容,它只是打破了我并方便地发送给operator delete
实现....
为什么无法解除分配?
#include <iostream>
template<typename T>
struct Allocator
{
using size_type = std::size_t;
using pointer = T*;
pointer allocate(size_type n)
{
return static_cast<pointer>(::operator new(n * sizeof(T)));
}
void deallocate(pointer p)
{
::operator delete((void*)p);
}
};
int main()
{
Allocator<int> al;
int a = 5;
int* p = al.allocate(1);
p = &a;
al.deallocate(p);
}
答案 0 :(得分:3)
除了分配的内容之外,您还要释放其他内容。
您正在分配,将结果分配给p
,然后立即使用您尝试解除分配的其他随机指针覆盖结果。
崩溃的原因应该是显而易见的。
P.S。就Visual Studio而言,它正确地将您带到发生非法内存访问的行。可悲的是,现代技术的状态还没有到那时你还能详细解释到底出了什么问题。