C# Can';找不到.NET错误的来源,需要帮助吗

C# Can';找不到.NET错误的来源,需要帮助吗,c#,.net,2d,sfml,C#,.net,2d,Sfml,我正在使用.NETFramework2.0编程一个2d平台。我使用的是SFML.NET,因为它是跨平台的,由MONO支持,并且有一个成熟的API。我的问题是,尽管我的程序编译正确,运行正常,但在关闭它时却出现了一个错误 “0x5ed0530e”处的指令引用了“0x0000051c”处的内存。无法“读取”内存 在仔细调试之后,我注意到问题发生在我初始化SFML String2d类之后 什么是错的;为什么在关闭程序时会发生此错误?即使没有什么问题,也有没有办法停止接收错误,这样我的程序的用户就不会被

我正在使用.NETFramework2.0编程一个2d平台。我使用的是SFML.NET,因为它是跨平台的,由MONO支持,并且有一个成熟的API。我的问题是,尽管我的程序编译正确,运行正常,但在关闭它时却出现了一个错误

“0x5ed0530e”处的指令引用了“0x0000051c”处的内存。无法“读取”内存

在仔细调试之后,我注意到问题发生在我初始化SFML String2d类之后

什么是错的;为什么在关闭程序时会发生此错误?即使没有什么问题,也有没有办法停止接收错误,这样我的程序的用户就不会被它惹恼

使用制度; 使用SFML.Graphics; 使用SFML.Window

namespace ProGUI
{
    class TextBox : Sprite
    {
        private String2D Text;
        public TextBox(RenderWindow App)
        {
            Image = new Image(App.Width, App.Height / 4, new Color(0, 0, 0));
            Position = new Vector2(0, App.Height - App.Height / 4);
        }

        public void SetText(string text)
        {
            Text = new String2D(text);
            Text.Font = new Font("Greyscale_Basic_Bold.ttf");
            Text.Position = new Vector2(Position.X + 5, Position.Y + 5);
            Text.Size = 12;
        }

        public string GetText()
        {
            return Text.Text;
        }

        public void Render(RenderWindow App)
        {
            App.Draw(this);
            App.Draw(Text);
        }

        public void MainLoop(RenderWindow App, Color clr)
        {
            while (App.IsOpened())
            {
                App.Clear(clr);

                App.DispatchEvents();

                App.Draw(this);
                App.Draw(Text);

                App.Display();
            }
        }
    }
}

正如您所看到的,没有不可靠的代码。绝对干净简单。

SFML String2d类是否实现IDisposable?是否正确处理所有实例


可能是终结器线程在它们处于无效状态时正在处理它们。

编译应用程序后,从visual studio命令行尝试“EditBin.exe/NXCOMPAT:NO C:\AppName.exe”。

您会发现
String2d
类:

  • 他有一只虫子
或者(更可能的是,根据您的问题描述)

  • 在应用程序生命周期的错误点被调用
例如,此时是否初始化了
文本
属性的容器?是否有多个线程同时访问
Text
属性(在您的例子中,我考虑的是某种游戏循环)


对我来说,由于这是在应用程序关闭时发生的,我希望在运行时处理完表单/窗口后,在关闭期间调用此
SetText
方法。如果您在表单的
Closed
事件中设置
this.Text
,您会得到类似的结果。

您最好在SFML论坛上问这个问题。一个快速的Google出现,表明String2D类型存在问题。

此代码将无限递归:

    public void Render(RenderWindow App)
    {
        App.Draw(this);
        App.Draw(Text);
    }

由于在
Sprite
x
上调用
App.Draw
,将调用
x.Render(App)
。因此,
App.Draw(this)
将在内部调用
this.Render(App)

该错误听起来像是来自非托管代码或COM组件。错误中是否包含堆栈跟踪?你能在发生错误的地方发布代码吗?@burningprodigy:当你的应用程序关闭时,是否调用了该代码?如果是的话,为什么?我非常不同意没有什么不对的。您至少未能验证参数、解释整数溢出和正确处置资源。可能不是错误的根源,但您是否曾对您创建的
Font
对象调用
dispose
?由于您始终使用相同的字体,因此无需每次重新创建对象;创建一次并将其存储在字段中,这将消除一些不必要的处理和内存压力。“尽管C#是静态类型语言,但即使是缩进”也没有多大意义。这让人们对“我检查了一切”产生了一些怀疑。