0

我正在尝试在 MSVS 2010 上调试项目。实现 - c++;当我调试源代码时,我收到 MSVS 报告的以下故障。

失败报告:

"First chance exception at 0x00000013fb5b9ee in unit.exe: 0xc00000005 access voilation reading location 0x00000000000000c."

问题在于获取地址。

int base = (*(abc::g_runc1.m_paulsenderpin.m_lastchunk_p)).xcpp::cxcppoutput::m_baseaddress;

我的项目很大,要包含源代码,

简而言之,它可以描述为: - paul 是一个模块,其发送器引脚连接到 c1。- xcpp 是接口

此源代码和项目是正确的,并且在 ARM 编译器上可以正常工作,但在 MSVS 上会出现访问冲突错误。在 msdn 上,有一些关于程序集设置权限的帖子,这些帖子避免了读取寻址位置。如果是这样,如何改变它......?还是有更好的选择来找到问题...?

任何帮助表示赞赏。

4

2 回答 2

0

您的代码正在尝试访问实际上不属于其进程的位置。用户应用程序的任何数据都不能位于如此接近于零的地址。由于您的表达式太长,无法简单地找到包含零引用的成员在哪里,我的提示是m_last chunk_p,并且m_baseaddress似乎是偏移量 12 处的成员。

有一个简单的解释,为什么当你的代码由与 ARM 一起工作的东西编译时可以正常工作:ARM 使用对齐的内存访问,因此类和结构成员与完整块对齐,尽管它们并不总是使用为它们分配的整个空间. 因此,您在代码中的某处使用了更大的指针或错误memset的参数,您的指针会被覆盖。

当您使用另一个版本(可能是另一个)编译器(或具有不同处理器架构 32/64 的非机器)编译它时,问题也可能消失,因为基本类型的大小并不总是相同。

您应该尝试检查表达式中实际指向的位置是零(或可能是 12),并尝试在其上设置监视。确保在sizeof任何地方都正确使用。

于 2013-08-16T13:11:52.473 回答
0

问题在于内存寻址,在 ARM 调试器 32 位和 MSVS10 48 位寻址中,因为它的 MSB 字节丢失,所以找不到正确的内存地址......!!!

于 2013-08-21T09:15:38.403 回答