gpt4 book ai didi

c++ - 指针正在以某种方式失效,这会导致访问冲突

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:18 26 4
gpt4 key购买 nike

开发环境是VS2010,语言是C#(GUI)和C++(Sim Engine)混合,为32位Windows编译。我们测试过的每个 Windows 版本都会出现异常,包括 32 位 XP、32 位 Vista、32 位 7 和 64 位 7。

我对这个完全不知所措。由于程序的性质(基于事件的模拟),在我们实际尝试访问它并获取 AVE 之前,指针在某个未知的时间点失效。

确实知道它正在以一种非常特殊的方式失效,我希望外面的人可能知道是什么导致了这种情况。当 AVE 发生时,它试图使用的指针已更改为:

(original) - ((size * 2) - 1)  

其中original为指针指向的原始地址,size为所指向对象的大小。

例如,其中一个访问冲突发生在一个应该指向 0x58E0 的指针上,并且该对象的大小为 0x70。它没有指向 0x58E0,而是指向 0x5801,即 0x58E0 - ((0x70 * 2) - 1)。同样的事情发生在另一个不同类型和大小的对象上,所以它似乎是一种非常特殊的关系。

编辑:在上面我不是谈论在代码中做指针运算,我只是展示指针应该和它是什么之间的数学关系当我们引用它并获得访问冲突异常时结束。希望一切都清楚。

编辑 2:我刚刚意识到,据我所知,我们只在作为 std vector 成员的对象上看到过这个问题。在我们的 vector 实现中是否有可能导致此行为的问题?

最佳答案

损坏的性质表明有人使用 realloc 搞砸了。

关于c++ - 指针正在以某种方式失效,这会导致访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9013417/

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