Сведения о вопросе

Life

17:49, 9th August, 2020

Теги

c#   voip    

C# Ошибка Поврежденной Памяти

Просмотров: 417   Ответов: 3

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

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:
Оказывается, одна из библиотек, которую мы использовали, отправляла событие, о котором мы не знали, и проблема была где-то там. Исправлено сейчас.



  Сведения об ответе

qwerty101

10:54, 28th August, 2020

Список некоторых возможностей:

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

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

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


  Сведения об ответе

9090

04:15, 2nd August, 2020

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

Можете ли вы сказать нам, вызываете ли вы неуправляемый код? Если да, то используете ли вы маршалинг по умолчанию или что-то более конкретное? Судя по виду стека trace, вы используете небезопасный код, например указатели и тому подобное? Это может быть твоей проблемой.


  Сведения об ответе

lool

01:54, 1st August, 2020

Вот более подробный stacktrace. Мне кажется, что это как-то связано с System.Windows.Form.dll

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться