gpt4 book ai didi

c++ - 从自定义分配器调用 deallocate 抛出无法解释的异常

转载 作者:行者123 更新时间:2023-11-28 00:07:12 24 4
gpt4 key购买 nike

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);
}

最佳答案

你正在释放你分配的东西以外的东西。

您正在分配,将结果分配给 p,然后立即用您尝试解除分配的其他随机指针覆盖结果。

崩溃的原因应该很明显。

附言就 Visual Studio 而言,它会正确地将您带到发生非法内存访问的那一行。可悲的是,现代技术的状态还没有达到您还可以详细解释到底出了什么问题的程度。

关于c++ - 从自定义分配器调用 deallocate 抛出无法解释的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34925110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com