2010-04-17 56 views
0

这是从我的previous question开始的一个后续操作,虽然这是关于其他内容。受其他正在运行的应用程序影响的应用程序结果

我一直有一个问题,出于某种原因,我从一个进程传递给另一个进程的消息只显示第一个字母,在本例中为“M”。

我的应用程序基于MSDN sample,所以为了确保我没有遗漏某些东西,我创建了一个单独的解决方案,添加了MSDN示例(不需要为我的需要做任何更改),毫不奇怪它工作正常。

现在,对于奇怪的位,当我运行MSDN示例运行(如在调试中)并运行我自己的应用程序时,文本打印出来没有任何问题。第二我运行我自己没有原始MSDN示例打开它无法正常工作,只显示“M”。

我看过调试器,似乎没有注意到任何可疑(这是一个稍微有点过时的图片,我已修复数据类型不一致)。

Debugger Information

任何人都可以提供一个解决方案,这样做呢?我从来没有遇到过这样的事情。 要查看我的源代码,只需查看我在问题顶部发布的链接就会更容易,我发布它的次数没有意义。

谢谢你的帮助。

编辑:

经过进一步调查,几乎好像我自己的应用程序以某种方式读取意外的其他应用程序的内存。如果我没有通过生成器窗口发送消息来“轮询”消息,它仍然会收到消息,这意味着它正从另一个(MSDN)进程读取消息,这也解释了为什么只有在运行MSDN时它才能正常工作先抽样。

我仍然不明白为什么会发生这种情况,如何阻止它,以及如何解决它,这可能是我遇到的最奇怪的事情。

****解决方案:****

虽然它不解决这两个应用程序的互相影响我设法解决这个问题文本的问题。我没有将这些必要的#include添加到这两个文件中,添加了这个修复,没有任何警告。

它总是小事情。

+0

一个进程无法读取另一个进程的内存;它们存在于不同的虚拟记忆空间中,所以这个假设是不合理的。更有可能的是,您有一个非确定性错误,其行为取决于某些未初始化数据的值或由无效指针引用的数据。这些值将取决于启动时的内存环境,并且通过影响环境,代码可以运行在不同的物理内存区域,因此可以在不同的值上运行。您可能会发现,出于同样的原因,调试器环境之外的行为是不同的。 – Clifford 2010-04-18 16:30:33

回答

1

在“内存查看器”窗口中查看pBuf。字符串查看器将终止于第一个空终止符,但超出后可能会有趣/有用或提供线索。

+0

显然我的IDE版本不包括它,太棒了。 http://msdn.microsoft.com/en-us/library/5d2www5s。aspx – 2010-04-17 20:31:42

+0

我已经将此标记为答案,尽管我无法使用它。我相信它会帮助我,无论如何,感谢您的时间Clifford。 – 2010-04-17 21:01:05

+0

@Jamie Keeling:它在VC++ 2008 Express中的工作原理与该页面上的描述完全相同,我还没有在2010 Beta版中尝试过,也许这个页面适用。如果是的话;一个很好的理由*不*升级!只需输入'pBuf'作为您希望观察的数据。否则,为'pBuf [0]','pBuf [1]','pBuf [2]'...添加单独的手表等。 – Clifford 2010-04-18 07:15:59

相关问题