Проблема покрытия: noescape: представление данных ресурса не закрыто или не сохранено в Table.get - PullRequest
0 голосов
/ 05 февраля 2020
this.btnSaveChanges.Visible = false;        
//Error: alloc_fn: A new resource is returned from allocation method Grp_des.
//Error: var_assign: Assigning: dtv = resource returned from this.dal.Grp_des(this.sParent).
DataView dtv = dal.Grp_des("ABC"); 
**//error:  noescape: Resource dtv is not closed or saved in Table.get.**
DataRow dtr = dtv.Table.Rows[0];
lblTransferFrom.Text = "Job Transferred from:  " + HttpUtility.HtmlEncode(dtr[0].ToString());
//Error: leaked_resource: Variable dtv going out of scope leaks the resource it refers to.

На что именно указывает ошибка? Может ли кто-нибудь помочь мне в этом, Спасибо заранее.

1 Ответ

1 голос
/ 17 февраля 2020

Я могу объяснить, что означают сообщения, включая noescape.

this.btnSaveChanges.Visible = false;        
//Error: alloc_fn: A new resource is returned from allocation method Grp_des.
//Error: var_assign: Assigning: dtv = resource returned from this.dal.Grp_des(this.sParent).
DataView dtv = dal.Grp_des("ABC"); 

Событие alloc_fn означает, что Coverity считает, что Grp_des выделяет ресурс, который должен быть утилизирован. Затем var_assign говорит, что на ресурс указывает переменная dtv.

**//error:  noescape: Resource dtv is not closed or saved in Table.get.**
DataRow dtr = dtv.Table.Rows[0];

Событие noescape является чисто информативным. Coverity говорит, что, хотя dtv было передано Table.get, этот метод не распоряжается ресурсом, а также не сохраняет его в поле. Следовательно, ресурс все еще распределен и все еще должен быть удален.

Это конкретное событие, как известно, сбивает с толку. Термин «escape», используемый для анализа stati c анализа, описывает, что происходит, когда значение сохраняется в поле или глобале. «noescape» означает, что этого не произошло.

lblTransferFrom.Text = "Job Transferred from:  " + HttpUtility.HtmlEncode(dtr[0].ToString());
//Error: leaked_resource: Variable dtv going out of scope leaks the resource it refers to.

Наконец, событие leaked_resource указывает, что мы достигли конца этого метода, и ресурс все еще не был утилизирован или сохранен для последующего удаления. , Обычно это плохо, потому что ресурс не будет утилизироваться до тех пор, пока сборщик мусора не восстановит связанный объект памяти, что может занять длительное время, а в это время что-то может истощиться для рассматриваемого ресурса.

Простым решением было бы добавить dtv.Dispose(); в конце или использовать оператор using для автоматического удаления и безопасного исключения. Но, конечно, не видя остальной код, невозможно быть уверенным, что это правильное исправление.

(Раскрытие: я работал на Coverity / Synopsys.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...