2010-04-17 19 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

相關問題