Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指针正在以某种方式失效,从而导致访问冲突 DEV环境为VS2010,语言为C(GUI)和C++(Sim Engine)混合,编译为32位Windows。我们测试过的每个版本的Windows都会出现异常,包括32位XP、32位Vista、32位7和64位7_C++_Pointers_Native_Access Violation_Invalidation - Fatal编程技术网

指针正在以某种方式失效,从而导致访问冲突 DEV环境为VS2010,语言为C(GUI)和C++(Sim Engine)混合,编译为32位Windows。我们测试过的每个版本的Windows都会出现异常,包括32位XP、32位Vista、32位7和64位7

指针正在以某种方式失效,从而导致访问冲突 DEV环境为VS2010,语言为C(GUI)和C++(Sim Engine)混合,编译为32位Windows。我们测试过的每个版本的Windows都会出现异常,包括32位XP、32位Vista、32位7和64位7,c++,pointers,native,access-violation,invalidation,C++,Pointers,Native,Access Violation,Invalidation,我对这个完全不知所措。由于程序的性质(基于事件的模拟),指针在我们实际尝试访问它并获取AVE之前的某个未知时间点失效 我所知道的是,它正在以一种非常特殊的方式被宣告无效,我希望有人可能知道是什么导致了这种情况。AVE发生时,它试图使用的指针已更改为: (original) - ((size * 2) - 1) 其中,original是指针指向的原始地址,size是指向的对象的大小 例如,其中一个访问冲突发生在本应指向0x58E0的指针上,并且该对象的大小为0x70。它没有指向0x58E0,

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

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

(original) - ((size * 2) - 1)  
其中,
original
是指针指向的原始地址,
size
是指向的对象的大小

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

编辑:在上面我并不是说在代码中做指针运算,我只是展示了指针应该是什么和当我们引用它并得到访问冲突异常时它最终是什么之间的数学关系。希望能把事情弄清楚


编辑2:我刚刚意识到,就我记忆所及,我们只看到了std向量成员对象的问题。我们的向量实现中是否存在可能导致这种行为的错误?

损坏的性质表明有人在使用realloc时出错。

损坏的性质表明有人在使用realloc时出错

我刚刚意识到,就我记忆所及,我们只看到了std向量中的对象的问题。在向量实现中是否有我们可能搞砸的东西导致了这种行为

这不是向量实现的问题,而是如何使用它的问题

vector
在现有对象的迭代器和指针增加容量时,肯定会使其失效。您看到的特殊数学关系将与特定实现的增长模式相关

解决方案是在向量大小发生变化时,不保持指向向量内容的指针。您可以保留一个指向向量的指针和一个索引,这将继续有效

我刚刚意识到,就我记忆所及,我们只看到了std向量中的对象的问题。在向量实现中是否有我们可能搞砸的东西导致了这种行为

这不是向量实现的问题,而是如何使用它的问题

vector
在现有对象的迭代器和指针增加容量时,肯定会使其失效。您看到的特殊数学关系将与特定实现的增长模式相关


解决方案是在向量大小发生变化时,不保持指向向量内容的指针。您可以保留一个指向向量的指针和一个索引,这将继续有效。

执行指针算术时,单位是一个对象的单位,而不是一个字节的单位。因此,乘以大小似乎有问题;再次检查您是否理解指针算法。也许你只是指
original-1
@KerrekSB,变量
original
他可能指的是被解释为整数的对象的原始地址。对不起,我在帖子中不够清楚。我在代码中没有做任何指针算法,上面只是显示了指针应该是什么,以及当我们尝试引用(现在)无效指针并获取访问冲突异常时它最终是什么之间的数学关系。您是否尝试了在修改指针时通知数据断点?我尝试过,但由于它是一个混合应用程序,VS不会让我创建一个。我目前正试图找到一种方法来解决这个问题。在做指针运算时,单位是一个对象,而不是一个字节。因此,乘以大小似乎有问题;再次检查您是否理解指针算法。也许你只是指
original-1
@KerrekSB,变量
original
他可能指的是被解释为整数的对象的原始地址。对不起,我在帖子中不够清楚。我在代码中没有做任何指针算法,上面只是显示了指针应该是什么,以及当我们尝试引用(现在)无效指针并获取访问冲突异常时它最终是什么之间的数学关系。您是否尝试了在修改指针时通知数据断点?我尝试过,但由于它是一个混合应用程序,VS不会让我创建一个。我目前正试图找到一种方法来解决这个问题。我只是在VS中为“realloc”做了一个“find”,但它没有找到任何东西,所以我们不直接调用它。如果有什么意义的话,就我所能想到的,这个问题似乎只出现在向量的对象上。我可以在向量实现中找到任何可能导致这种问题的东西吗?好了。向量调用realloc。试着在Vector中存储指向对象的指针。我只是在VS中为“realloc”做了一个“Find”,但它没有找到任何东西,所以我们不直接调用它。如果这有什么意义的话,就我所能想到的,这个问题似乎只有在