我已经开始学习 XNA 4.0 并且正在尝试加载和绘制 3D 模型,使用 Blender 2.6 从 3ds 转换为 fbx/x 。该程序没有给出构建错误或警告,我已经能够打开可执行文件几次并且运行良好。一段时间后,我无法再打开游戏,它开始给我这个错误:
AccessViolationException - 试图读取或写入受保护的内存。这通常表明其他内存已损坏
我将项目发送给了一位朋友,他能够编译和运行游戏。
删除mesh.Draw()
部分似乎可以解决这个问题,但我需要显示模型。
//后期编辑:发现是暂时的错误,所以如果现在报错,过一段时间(或者重新打开visual studio,我还不知道是哪个触发的)我可以正常运行程序使用相同的源代码和文件。
堆栈跟踪:
System.AccessViolationException 未处理 Message=尝试读取或写入受保护的内存。这通常表明其他内存已损坏。源=Microsoft.Xna.Framework.Graphics
StackTrace:在 Microsoft.Xna.Framework.Graphics.GraphicsDevice.Present() 在 Microsoft.Xna.Framework.GraphicsDeviceManager 的 Microsoft.Xna.Framework.Graphics.GraphicsDevice.Present(tagRECT* pSource, tagRECT* pDest, HWND__* hOverride)。 Microsoft.Xna.Framework.IGraphicsDeviceManager.EndDraw() 在 Microsoft.Xna.Framework.Game.EndDraw() 在 Microsoft.Xna.Framework.Game.DrawFrame() 在 Microsoft.Xna.Framework.Game.Tick() 在 Microsoft。 Xna.Framework.Game.HostIdle(Object sender, EventArgs e) 在 Microsoft.Xna.Framework.GameHost.OnIdle() 在 Microsoft.Xna.Framework.WindowsGameHost.RunOneFrame() 在 Microsoft.Xna.Framework.WindowsGameHost.ApplicationIdle(Object发件人,EventArgs e) 在 System.Windows.Forms.Application.ThreadContext.System.Windows.Forms。UnsafeNativeMethods.IMsoComponent.FDoIdle(Int32 grfidlef) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application。 ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.Run(Form mainForm) 在 Microsoft.Xna.Framework。 WindowsGameHost.Run() 在 Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) 在 Microsoft.Xna.Framework.Game.Run() 在 _3D.Program.Main(String[] args) 在 C:\Users\username \Desktop\3D\3D\3D\Program.cs:第 15 行System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext 的 IMsoComponent.FDoIdle(Int32 grfidlef)。 RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.Run(Form mainForm) 在 Microsoft.Xna.Framework.WindowsGameHost。 Run() at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) at Microsoft.Xna.Framework.Game.Run() at _3D.Program.Main(String[] args) in C:\Users\username\Desktop \3D\3D\3D\Program.cs:第 15 行System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext 的 IMsoComponent.FDoIdle(Int32 grfidlef)。 RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.Run(Form mainForm) 在 Microsoft.Xna.Framework.WindowsGameHost。 Run() at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) at Microsoft.Xna.Framework.Game.Run() at _3D.Program.Main(String[] args) in C:\Users\username\Desktop \3D\3D\3D\Program.cs:第 15 行FDoIdle(Int32 grfidlef) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner( Int32 原因,ApplicationContext 上下文)在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 原因,ApplicationContext 上下文)在 System.Windows.Forms.Application.Run(Form mainForm)在 Microsoft.Xna.Framework.WindowsGameHost.Run( ) 在 Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) 在 Microsoft.Xna.Framework.Game.Run() 在 _3D.Program.Main(String[] args) 在 C:\Users\username\Desktop\3D \3D\3D\Program.cs:第 15 行FDoIdle(Int32 grfidlef) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner( Int32 原因,ApplicationContext 上下文)在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 原因,ApplicationContext 上下文)在 System.Windows.Forms.Application.Run(Form mainForm)在 Microsoft.Xna.Framework.WindowsGameHost.Run( ) 在 Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) 在 Microsoft.Xna.Framework.Game.Run() 在 _3D.Program.Main(String[] args) 在 C:\Users\username\Desktop\3D \3D\3D\Program.cs:第 15 行System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext .RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at Microsoft.Xna.Framework.WindowsGameHost.Run() at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) at Microsoft.Xna.Framework.Game.Run() 在 C:\Users\username\Desktop\3D\3D\3D\Program.cs:line 15 中的 _3D.Program.Main(String[] args)System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext .RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at Microsoft.Xna.Framework.WindowsGameHost.Run() at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) at Microsoft.Xna.Framework.Game.Run() 在 C:\Users\username\Desktop\3D\3D\3D\Program.cs:line 15 中的 _3D.Program.Main(String[] args)Int32 pvLoopData)在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 原因,ApplicationContext 上下文)在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 原因,ApplicationContext 上下文)在 System.Windows.Forms.Application。在 Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) 在 Microsoft.Xna.Framework.Game.Run() 在 _3D.Program.Main() 的 Microsoft.Xna.Framework.WindowsGameHost.Run() 运行(Form mainForm) C:\Users\username\Desktop\3D\3D\3D\Program.cs 中的 String[] args):第 15 行Int32 pvLoopData)在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 原因,ApplicationContext 上下文)在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 原因,ApplicationContext 上下文)在 System.Windows.Forms.Application。在 Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) 在 Microsoft.Xna.Framework.Game.Run() 在 _3D.Program.Main() 的 Microsoft.Xna.Framework.WindowsGameHost.Run() 运行(Form mainForm) C:\Users\username\Desktop\3D\3D\3D\Program.cs 中的 String[] args):第 15 行Windows.Forms.Application.Run(Form mainForm) 在 Microsoft.Xna.Framework.WindowsGameHost.Run() 在 Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) 在 Microsoft.Xna.Framework.Game.Run() 在_3D.Program.Main(String[] args) 在 C:\Users\username\Desktop\3D\3D\3D\Program.cs:line 15Windows.Forms.Application.Run(Form mainForm) 在 Microsoft.Xna.Framework.WindowsGameHost.Run() 在 Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) 在 Microsoft.Xna.Framework.Game.Run() 在_3D.Program.Main(String[] args) 在 C:\Users\username\Desktop\3D\3D\3D\Program.cs:line 15
内部异常:
在此先感谢并为我的英语不好感到抱歉。