2014-12-24 122 views
0

我在new font()行代码的未发布的资源:非托管对象

未发行资源设防问题:非托管对象-Fortify C#

代码:

try 
{ 
var c = new ChartArea(); 
c.AxisY.TitleFont = new Font("Arial", 10, FontStyle.Bold);// --> Fortify issue 
} 
finally 
{ 
    if (ca.AxisY.TitleFont!= null) 
     { 
     ca.AxisY.TitleFont.Dispose(); //--> does not resolve the foritfy issue 
     } 
} 

我试图处理titlefont,但它没有帮助。你能让我知道如何解决这个问题吗?

Fortify的详细信息:

函数DrawChart()在DrawController.cs未能正确 处置由字体()在线路分配非托管系统资源134

+0

可能重复(http://stackoverflow.com/questions/22661480/calling-处理字体在Windows窗体中) – Hogan

+0

静态分析器很少得到这个正确的。它们看起来不够深刻,看不到字体应该被丢弃,而且这种情况发生得很晚。自动,当用户完成查看图表。只要压制警告。 –

回答

0

的问题是如果将新Font分配给.TitleFont会引发异常。在这种情况下,.TitleFont可能仍然为null,但Font对象将被分配,并且您没有保留它的句柄。更

一点点打字可能会解决问题:在Windows窗体调用dispose()的字体]的

var c = null; 
Font arial10bold = null; 
try 
{ 
c = new ChartArea(); 
arial10bold = new Font("Arial", 10, FontStyle.Bold); 
c.AxisY.TitleFont = arial10bold; 
} 
finally 
{ 
    if (arial10bold != null) { 
     arial10bold.Dispose; 
    } 
} 
相关问题