2008-08-20 3 views
2

Я не могу опубликовать код (проприетарные проблемы), но кто-нибудь знает, какие типы вещей могут вызвать следующую ошибку в C#. Он бросается клиентом VOIP, который я написал (используя counterpath api), когда вызов завершается другим клиентом. Ошибка:C# Ошибка коррумпированной памяти

System.AccessViolationException was unhandled 
    Message="Attempted to read or write protected memory. This is often an indication that other memory is corrupt." 
    Source="System.Windows.Forms" 
    StackTrace: 
     at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
     at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.Run(Form mainForm) 
     at CollabAnalysisSF.Edge.GUI.Forms.Program.Main() in d:\data\beyerss\Desktop\client\GUI\ARGui\Program.cs:line 18 
     at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException:

UPDATE: Оказывается, одна из библиотек, которые мы использовали отправляли от события, которое мы не знаем о, и проблема была где-то там. Исправлено.

ответ

3

Перечень некоторых возможностей:

  • Объект используется после того, как он был удален. Это может произойти много, если вы удаляете управляемый объект в финализаторе (вы не должны этого делать).
  • Неисследованная реализация одного из объектов, которые вы используете, прослушивается и повреждает кучу памяти процесса. Бывает много с DirectX, GDI и другими.
  • Ошибка на управляемом неуправляемом рубеже. Убедитесь, что вы привязали управляемый указатель, прежде чем использовать его в неуправляемой части кода.
  • Вы используете небезопасный блок и делаете с ним забавные вещи.

В вас случае это может быть проблема с Windows Forms. Но проблема заключается не в том, что это происходит, а в том, что она не сообщается правильно; вы, возможно, все еще сделали что-то не так.

Можете ли вы определить, какой элемент управления вызывает ошибку, используя HWND? Это всегда одно и то же? Этот элемент управления делает что-то смешное перед сбоем приложения? Является ли неотъемлемая часть элемента управления пользовательским окном или стандартным элементом управления?

1

Этот тип пролета может возникнуть, если вы вызываете неуправляемый код, например. dll. Это может произойти, когда Маршаллинг идет ужасно неправильно.

Не могли бы вы рассказать нам, если вы вызываете неуправляемый код? Если вы используете стандартную Marshalling или более конкретные вещи? Из внешнего вида трассировки стека вы используете небезопасный код, например. Указатели и тому подобное? Это может быть вашей проблемой.

0

Подробнее о стеке. Она смотрит на меня, как это что-то делать с System.Windows.Form.dll

TargetSite занесен в список {IntPtr DispatchMessageW(MSG ByRef)}
и под модулем он имеет System.Windows.Forms.dll

Смежные вопросы