【发布时间】:2010-08-05 02:58:32
【问题描述】:
我们有一个为对齐目的而过大的数组,这样一来错误就不会被通常的机制捕获。
是否可以在 Windows 中保护一个小的任意区域(数组开头和结尾的 16 个字节),从而导致访问冲突?语言是 C++。
【问题讨论】:
-
检查请求的索引是否有效是不可能的?
-
这是不可能的。可以保护的最小内存单元是一个页面,也就是 4K。从理论上讲,您可以对数据进行处理,使数组在页面边界处结束,但这似乎需要做很多工作,但收效甚微。
-
您确定要访问冲突吗?异常处理会不会更容易?
-
@dreamlax:不幸的是,我们分发的是裸指针,所以没有检查索引。 @Luke:我认为可能是这种情况,我可能会使用在销毁时检查的哨兵/标签值。 @Martin York:例外就好,但我认为其余问题仍然适用。
-
@ngoozeff:我不确定我是否理解。你正在分发一个指向数组中元素的指针,而这个指针的接收者手动递增它?
标签: c++ windows memory-management