{"id":302214,"date":"2020-04-20T21:00:36","date_gmt":"2020-04-20T21:00:36","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=302214"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2020-04-20T21:00:36","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=302214","title":{"rendered":"\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 Newton Game Dynamics \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c PVS-Studio"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/498180\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/uy\/ni\/sz\/uynisz7isgxhs8jv2xqvrxxlyyg.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1\"><\/div>\n<p>  \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u043c\u043d\u043e\u0439 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a Newton Game Dynamics. \u0417\u043d\u0430\u044f, \u0447\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0451\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c PVS-Studio. \u041c\u043e\u0439 \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0437\u043c \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0441\u0442\u0435\u0433\u043d\u0443\u043b\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0410\u043d\u0434\u0440\u0435\u0439 \u041a\u0430\u0440\u043f\u043e\u0432 \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 2014 \u0433\u043e\u0434\u0443, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u044d\u0442\u043e \u0435\u0449\u0451 \u0438 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442. \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437 Newton Game Dynamics \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d 27 \u0444\u0435\u0432\u0440\u0430\u043b\u044f 2020 \u0433\u043e\u0434\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0442\u043e\u0436\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 6 \u043b\u0435\u0442. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u043c\u0438\u043c\u043e \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0434\u0432\u0438\u0436\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0430\u0433\u043e\u0432 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430<\/h3>\n<p>  \u0412 2014 \u0433\u043e\u0434\u0443 PVS-Studio \u0432\u044b\u0434\u0430\u043b:<\/p>\n<ul>\n<li>48 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f;<\/li>\n<li>79 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f;<\/li>\n<li>261 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f.<\/li>\n<\/ul>\n<p>  \u041d\u0430 2020 \u0433\u043e\u0434 \u0436\u0435:<\/p>\n<ul>\n<li>124 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f;<\/li>\n<li>272 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f;<\/li>\n<li>787 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f (\u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435).<\/li>\n<\/ul>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0432 <a href=\"https:\/\/www.viva64.com\/ru\/b\/0263\/\">\u0441\u0442\u0430\u0442\u044c\u0435 \u0410\u043d\u0434\u0440\u0435\u044f<\/a>, \u0438\u0437\u0443\u0447\u0438\u043c \u0436\u0435 \u0438\u0445 \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<h3>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439<\/h3>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N1<\/b><\/p>\n<p>  V519 The &#8216;tmp[i][2]&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 468, 469. dgCollisionConvexHull.cpp 469<\/p>\n<pre><code class=\"cpp\">bool dgCollisionConvexHull::Create (dgInt32 count,....) {   ....   dgStack&lt;dgVector&gt; tmp(3 * count);   for (dgInt32 i = 0; i &lt; count; i ++)    {     tmp[i][0] = dgFloat32 (buffer[i*3 + 0]);     tmp[i][1] = dgFloat32 (buffer[i*3 + 1]);     tmp[i][2] = dgFloat32 (buffer[i*3 + 2]);     tmp[i][2] = dgFloat32 (0.0f);   }   .... }<\/code><\/pre>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <i>tmp[i][2]<\/i> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043f\u043e\u0434\u0440\u044f\u0434. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0435. \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e, \u0443\u0434\u0430\u043b\u0438\u0432 \u043b\u0438\u0448\u043d\u044e\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0438\u043d\u0434\u0435\u043a\u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u2013 \u044d\u0442\u043e \u0443\u0436\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>count<\/i>. \u0414\u0430\u043b\u0435\u0435 \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 <i>V519<\/i>, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0443 \u0410\u043d\u0434\u0440\u0435\u044f, \u043d\u043e \u0435\u0441\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u0439 <a href=\"https:\/\/www.viva64.com\/ru\/examples\/\">\u0431\u0430\u0437\u0435 \u043e\u0448\u0438\u0431\u043e\u043a<\/a>:<\/p>\n<p>  V519 The &#8216;damp&#8217; object is assigned values twice successively. Perhaps this is a mistake. physics dgbody.cpp 404<\/p>\n<pre><code class=\"cpp\">void dgBody::AddBuoyancyForce (....) {   ....   damp = (m_omega % m_omega) * dgFloat32 (10.0f) *         fluidAngularViscousity;    damp = GetMax (GetMin ((m_omega % m_omega) *         dgFloat32 (1000.0f) *         fluidAngularViscousity, dgFloat32(0.25f)),         dgFloat32(2.0f));   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c, \u044f \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043b\u043e\u0433\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0422\u0430\u043a\u0436\u0435 \u044f \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>AddBuoyancyForce<\/i> \u0432 <i>dgbody.cpp<\/i>. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e: \u0435\u0441\u043b\u0438 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f PVS-Studio, \u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u043d\u0435\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u2013 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  <b>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0444\u0444\u0442\u043e\u043f<\/b><\/p>\n<p>  \u042f \u043d\u0435 \u0431\u0435\u0440\u0443\u0441\u044c \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0438\u0436\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u0435\u0434\u0443\u0442 \u043e\u043d\u0438 \u0441\u0435\u0431\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u043b \u0434\u0432\u0430 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f:<\/p>\n<p>  V621 Consider inspecting the &#8216;for&#8217; operator. It&#8217;s possible that the loop will be executed incorrectly or won&#8217;t be executed at all. MultiBodyCar.cpp 942<\/p>\n<p>  V654 The condition &#8216;i &lt; count&#8217; of loop is always false. MultiBodyCar.cpp 942<\/p>\n<pre><code class=\"cpp\">void MultibodyBodyCar(DemoEntityManager* const scene) {   ....   int count = 10;   count = 0;   for (int i = 0; i &lt; count; i++)    {     for (int j = 0; j &lt; count; j++)      {       dMatrix offset(location);       offset.m_posit += dVector (j * 5.0f + 4.0f, 0.0f, i * 5.0f, 0.0f);       \/\/manager-&gt;CreateSportCar(offset, viperModel.GetData());       manager-&gt;CreateOffRoadCar(offset, monsterTruck.GetData());     }   }   .... }<\/code><\/pre>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0442\u043e\u0433\u0434\u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0446\u0438\u043a\u043b\u0430 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0445\u043e\u0434\u043e\u043c. \u0422\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<p>  V519 The &#8216;ret&#8217; variable is assigned values twice successively. Perhaps this is a mistake.Check lines: 325, 326. dString.cpp 326<\/p>\n<pre><code class=\"cpp\">void dString::LoadFile (FILE* const file) {   ....   size_t ret = fread(m_string, 1, size, file);   ret = 0;   .... }<\/code><\/pre>\n<p>  V519 The &#8216;ret&#8217; variable is assigned values twice successively.Perhaps this is a mistake. Check lines: 1222, 1223. DemoEntityManager.cpp 1223<\/p>\n<pre><code class=\"cpp\">void DemoEntityManager::DeserializeFile (....) {   ....   size_t ret = fread(buffer, size, 1, (FILE*) serializeHandle);   ret = 0;   .... }<\/code><\/pre>\n<p>  V560 A part of conditional expression is always true: (count &lt; 10). dMathDefines.h 726<\/p>\n<pre><code class=\"cpp\">bool dCholeskyWithRegularizer(....) {   ....   int count = 0;   while (!pass &amp;&amp; (count &lt; 10))   {     ....   }   .... } <\/code><\/pre>\n<p>  V654 The condition &#8216;ptr != edge&#8217; of loop is always false. dgPolyhedra.cpp 1571<\/p>\n<pre><code class=\"cpp\">void dgPolyhedra::Triangulate (....) {   ....   ptr = edge;   ....   while (ptr != edge);   .... }<\/code><\/pre>\n<p>  V763 Parameter &#8216;count&#8217; is always rewritten in function body before being used. ConvexCast.cpp 31<\/p>\n<pre><code class=\"cpp\">StupidComplexOfConvexShapes (...., int count) {   count = 40;   \/\/count = 1;   .... }<\/code><\/pre>\n<p>  V547 Expression &#8216;axisCount&#8217; is always false. MultiBodyCar.cpp 650<\/p>\n<pre><code class=\"cpp\">void UpdateDriverInput(dVehicle* const vehicle, dFloat timestep)  {   ....   int axisCount = scene-&gt;GetJoystickAxis(axis);   axisCount = 0;   if (axisCount)   {     ....   }   .... }<\/code><\/pre>\n<p>  \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043a\u0430\u0436\u0443\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0432 \u043a\u043e\u0434, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435, \u043d\u0430\u0434\u043e, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439. \u0427\u0442\u043e \u0436\u0435, \u044f \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 pet-\u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e, \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b \u0432 \u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u044e\u0434\u0435\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u044b\u0431\u043e\u0440 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0437\u0430 \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N2<\/b><\/p>\n<p>  V769 The &#8216;result&#8217; pointer in the &#8216;result + i&#8217; expression equals nullptr. The resulting value is senseless and it should not be used. win32_monitor.c 286<\/p>\n<pre><code class=\"cpp\">GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count) {   GLFWvidmode* result = NULL;   ....   for (i = 0;  i &lt; *count;  i++)     {     if (_glfwCompareVideoModes(result + i, &amp;mode) == 0)       break;     } }<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <i>result<\/i> \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043c\u044b\u0441\u043b\u0430, \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. <\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N3, N4, N5<\/b><\/p>\n<p>  V778 Two similar code fragments were found. Perhaps, this is a typo and &#8216;m_colorChannel&#8217; variable should be used instead of &#8216;m_binormalChannel&#8217;. dgMeshEffect1.cpp 1887<\/p>\n<pre><code class=\"cpp\">void dgMeshEffect::EndBuildFace () {   ....   if (m_attrib.m_binormalChannel.m_count) &lt;=   {     attibutes.m_binormalChannel.       PushBack(m_attrib.m_binormalChannel[m_constructionIndex + i]);   }   if (m_attrib.m_binormalChannel.m_count) &lt;=    {     attibutes.m_colorChannel.       PushBack(m_attrib.m_colorChannel[m_constructionIndex + i]);   } }<\/code><\/pre>\n<p>  \u041f\u043e\u0445\u043e\u0436\u0435, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441\u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u043b \u0434\u0432\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u044f. \u0412\u0442\u043e\u0440\u043e\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">if (m_attrib.m_colorChannel.m_count) &lt;=  {   attibutes.m_colorChannel.   PushBack(m_attrib.m_colorChannel[m_constructionIndex + i]); }<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430:<\/p>\n<p>  V524 It is odd that the body of &#8216;EnabledAxis1&#8217; function is fully equivalent to the body of &#8216;EnabledAxis0&#8217; function. dCustomDoubleHingeActuator.cpp 88<\/p>\n<pre><code class=\"cpp\">void dCustomDoubleHingeActuator::EnabledAxis0(bool state) {   m_axis0Enable = state;  &lt;= } void dCustomDoubleHingeActuator::EnabledAxis1(bool state) {   m_axis0Enable = state;  &lt;= }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043a\u043e\u0434 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">void dCustomDoubleHingeActuator::EnabledAxis1(bool state) {   m_axis1Enable = state; }<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442:<\/p>\n<p>  V525 The code contains the collection of similar blocks. Check items &#8216;m_x&#8217;, &#8216;m_y&#8217;, &#8216;m_y&#8217; in lines 73, 74, 75. dWoodFracture.cpp 73<\/p>\n<pre><code class=\"cpp\">WoodVoronoidEffect(....) {   ....   for (int i = 0; i &lt; count; i ++)    {     dFloat x = dGaussianRandom(size.m_x * 0.1f);     dFloat y = dGaussianRandom(size.m_y * 0.1f);  &lt;=     dFloat z = dGaussianRandom(size.m_y * 0.1f);  &lt;=   ....   }   .... }<\/code><\/pre>\n<p>  \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>z<\/i> \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">dFloat z = dGaussianRandom(size.m_z * 0.1f); <\/code><\/pre>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f N6, N7<\/b><\/p>\n<p>  \u0412 Newton Game Dynamics, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 \u0421 \u0438\u043b\u0438 \u0421++, \u043d\u0435 \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u043e \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438. \u0422\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u0438\u0442\u044c, \u043e\u043d\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0432 \u043e\u0431\u0449\u0435\u043c, \u043e\u0447\u0435\u043d\u044c \u043e\u043f\u0430\u0441\u043d\u044b \u0438 \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043d\u0430\u0448 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a. \u041a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438 \u043d\u0435 \u043f\u0430\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0435\u043c \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043f\u043e\u0438\u0441\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0438 \u0435\u0433\u043e \u043e\u0442\u043b\u0430\u0434\u043a\u0443. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439:<\/p>\n<p>  V522 There might be dereferencing of a potential null pointer &#8216;face&#8217;. dgContactSolver.cpp 351<\/p>\n<pre><code class=\"cpp\">DG_INLINE dgMinkFace* dgContactSolver::AddFace(dgInt32 v0,dgInt32 v1,                                                dgInt32 v2) {   dgMinkFace* const face = NewFace();   face-&gt;m_mark = 0;    .... }<\/code><\/pre>\n<p>  \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 NewFace \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e:<\/p>\n<pre><code class=\"cpp\">DG_INLINE dgMinkFace* dgContactSolver::NewFace() {   dgMinkFace* face = (dgMinkFace*)m_freeFace;   if (m_freeFace)    {     m_freeFace = m_freeFace-&gt;m_next;   } else    {     face = &amp;m_facePool[m_faceIndex];     m_faceIndex++;     if (m_faceIndex &gt;= DG_CONVEX_MINK_MAX_FACES)      {       return NULL;     }   } #ifdef _DEBUG     memset(face, 0, sizeof (dgMinkFace)); #endif   return face; }<\/code><\/pre>\n<p>  \u0412 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0442\u043e\u0447\u0435\u043a \u0432\u044b\u0445\u043e\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>NewFace <\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f <i>NULL<\/i>, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0433\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>  \u0415\u0449\u0451 \u0435\u0441\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430:<\/p>\n<p>  V522 There might be dereferencing of a potential null pointer &#8216;perimeter&#8217;. dgPolyhedra.cpp 2541<\/p>\n<pre><code class=\"cpp\">bool dgPolyhedra::PolygonizeFace(....) {   ....   dgEdge* const perimeter = flatFace.AddHalfEdge                            (edge1-&gt;m_next-&gt;m_incidentVertex,                             edge1-&gt;m_incidentVertex);   perimeter-&gt;m_twin = edge1;   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <i>AddHalfEdge<\/i>:<\/p>\n<pre><code class=\"cpp\">dgEdge* dgPolyhedra::AddHalfEdge (dgInt32 v0, dgInt32 v1) {   if (v0 != v1)    {     dgPairKey pairKey (v0, v1);     dgEdge tmpEdge (v0, -1);     dgTreeNode* node = Insert (tmpEdge, pairKey.GetVal());      return node ? &amp;node-&gt;GetInfo() : NULL;   } else    {     return NULL;   } }<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0443\u0436\u0435 <i>NULL<\/i> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432 \u0434\u0432\u0443\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u0432\u044b\u0445\u043e\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0442\u0440\u0451\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445.<\/p>\n<p>  \u0412\u0441\u0435\u0433\u043e \u0436\u0435 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b 48 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 <i>V522<\/i>. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u0432\u043e\u0451\u043c \u043e\u043d\u0438 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430. <\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N8<\/b><\/p>\n<p>  V668 There is no sense in testing the &#8216;pBits&#8217; pointer against null, as the memory was allocated using the &#8216;new&#8217; operator. The exception will be generated in the case of memory allocation error. TargaToOpenGl.cpp 166<\/p>\n<pre><code class=\"cpp\">char* const pBits = new char [width * height * 4]; if(pBits == NULL)  {   fclose(pFile);   return 0; }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c <i>new<\/i>, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0443\u043b\u0451\u043c. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u0415\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>new<\/i> \u043d\u0435 \u0441\u043c\u043e\u0433 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c, \u0442\u043e, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 \u044f\u0437\u044b\u043a\u0430 <i>\u0421++<\/i>, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <i>std::bad_alloc().<\/i> \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f. \u042d\u0442\u043e \u044f\u0432\u043d\u043e \u043d\u0435 \u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u041e\u043d \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b. \u042d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0443\u0442\u0435\u0447\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0430.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f N9, N10, N11<\/b><\/p>\n<ul>\n<li>V764 Possible incorrect order of arguments passed to &#8216;CreateWheel&#8217; function: &#8216;height&#8217; and &#8216;radius&#8217;. StandardJoints.cpp 791<\/li>\n<li>V764 Possible incorrect order of arguments passed to &#8216;CreateWheel&#8217; function: &#8216;height&#8217; and &#8216;radius&#8217;. StandardJoints.cpp 833<\/li>\n<li>V764 Possible incorrect order of arguments passed to &#8216;CreateWheel&#8217; function: &#8216;height&#8217; and &#8216;radius&#8217;. StandardJoints.cpp 884<\/li>\n<\/ul>\n<p>  \u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0432\u044b\u0437\u043e\u0432\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">NewtonBody* const wheel = CreateWheel (scene, origin, height, radius);<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">static NewtonBody* CreateWheel (DemoEntityManager* const scene,   const dVector&amp; location, dFloat radius, dFloat height)<\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u044b \u043c\u0435\u0441\u0442\u0430\u043c\u0438.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f N12, N13<\/b><\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u043b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u0434\u0432\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438:<\/p>\n<p>  V621 Consider inspecting the &#8216;for&#8217; operator. It&#8217;s possible that the loop will be executed incorrectly or won&#8217;t be executed at all. dgCollisionUserMesh.cpp 161<\/p>\n<p>  V621 Consider inspecting the &#8216;for&#8217; operator. It&#8217;s possible that the loop will be executed incorrectly or won&#8217;t be executed at all. dgCollisionUserMesh.cpp 236<\/p>\n<pre><code class=\"cpp\">void dgCollisionUserMesh::GetCollidingFacesContinue     (dgPolygonMeshDesc* const data) const {   ....   data-&gt;m_faceCount = 0; &lt;=   data-&gt;m_userData = m_userData;   data-&gt;m_separationDistance = dgFloat32(0.0f);   m_collideCallback(&amp;data-&gt;m_p0, NULL);   dgInt32 faceCount0 = 0;   dgInt32 faceIndexCount0 = 0;   dgInt32 faceIndexCount1 = 0;   dgInt32 stride = data-&gt;m_vertexStrideInBytes \/ sizeof(dgFloat32);   dgFloat32* const vertex = data-&gt;m_vertex;   dgInt32* const address = data-&gt;m_meshData.m_globalFaceIndexStart;   dgFloat32* const hitDistance = data-&gt;m_meshData.m_globalHitDistance;   const dgInt32* const srcIndices = data-&gt;m_faceVertexIndex;   dgInt32* const dstIndices = data-&gt;m_globalFaceVertexIndex;   dgInt32* const faceIndexCountArray = data-&gt;m_faceIndexCount;   for (dgInt32 i = 0; (i &lt; data-&gt;m_faceCount)&amp;&amp;        (faceIndexCount0 &lt; (DG_MAX_COLLIDING_INDICES - 32));        i++)   {     ....   }   .... } void dgCollisionUserMesh::GetCollidingFacesDescrete     (dgPolygonMeshDesc* const data) const {   ....   data-&gt;m_faceCount = 0; &lt;=     data-&gt;m_userData = m_userData;   data-&gt;m_separationDistance = dgFloat32(0.0f);   m_collideCallback(&amp;data-&gt;m_p0, NULL);   dgInt32 faceCount0 = 0;   dgInt32 faceIndexCount0 = 0;   dgInt32 faceIndexCount1 = 0;   dgInt32 stride = data-&gt;m_vertexStrideInBytes \/ sizeof(dgFloat32);   dgFloat32* const vertex = data-&gt;m_vertex;   dgInt32* const address = data-&gt;m_meshData.m_globalFaceIndexStart;   dgFloat32* const hitDistance = data-&gt;m_meshData.m_globalHitDistance;   const dgInt32* const srcIndices = data-&gt;m_faceVertexIndex;   dgInt32* const dstIndices = data-&gt;m_globalFaceVertexIndex;   dgInt32* const faceIndexCountArray = data-&gt;m_faceIndexCount;   for (dgInt32 i = 0; (i &lt; data-&gt;m_faceCount)&amp;&amp;        (faceIndexCount0 &lt; (DG_MAX_COLLIDING_INDICES - 32));        i++)   {     ....   }   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f: <i>i &lt; data-&gt;m_faceCount. <\/i>\u0422\u0430\u043a \u043a\u0430\u043a <i>data-&gt;m_faceCount <\/i>\u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f 0, \u0434\u0430\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043d\u0438 \u0440\u0430\u0437\u0443. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0437\u0430\u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0435 <i>m_faceCount<\/i>, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0438\u043b \u0442\u0435\u043b\u043e \u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<p>  <b>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N14, N15<\/b><\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u043b \u0434\u0432\u0430 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u043e\u0434\u0430, \u0438\u0434\u0443\u0449\u0438\u0435 \u043f\u043e\u0434\u0440\u044f\u0434:<\/p>\n<p>  V630 The &#8216;_alloca&#8217; function is used to allocate memory for an array of objects which are classes containing constructors. dgSkeletonContainer.cpp 1341<\/p>\n<p>  V630 The &#8216;_alloca&#8217; function is used to allocate memory for an array of objects which are classes containing constructors. dgSkeletonContainer.cpp 1342<\/p>\n<pre><code class=\"cpp\">#define alloca _alloca .... #define dAlloca(type,size) (type*) alloca ((size) * sizeof (type)) .... dgSpatialMatrix::dgSpatialMatrix(); dgSpatialMatrix::dgSpatialMatrix(dgFloat32 val); .... dgSpatialMatrix* const bodyMassArray = dgAlloca(dgSpatialMatrix,                                                 m_nodeCount); dgSpatialMatrix* const jointMassArray = dgAlloca(dgSpatialMatrix,                                                  m_nodeCount); <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0438\u043b\u0438 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440. \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440. \u041f\u0440\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440. \u042d\u0442\u043e \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0430\u043c. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <i>malloc\/free<\/i>, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043b\u043e\u0445 \u0442\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u0430, \u0432\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0447\u0438\u0441\u0442\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412\u043e\u0442 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430:  <\/p>\n<ul>\n<li>V630 The &#8216;_alloca&#8217; function is used to allocate memory for an array of objects which are classes containing constructors. dVehicleSolver.cpp 498<\/li>\n<li>V630 The &#8216;_alloca&#8217; function is used to allocate memory for an array of objects which are classes containing constructors. dVehicleSolver.cpp 499<\/li>\n<li>V630 The &#8216;_alloca&#8217; function is used to allocate memory for an array of objects which are classes containing constructors. dVehicleSolver.cpp 1144<\/li>\n<li>\u0418 \u0435\u0449\u0451 \u043e\u043a\u043e\u043b\u043e 10 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c, PVS-Studio \u0441\u043d\u043e\u0432\u0430 \u043d\u0435 \u043f\u043e\u0434\u0432\u0451\u043b, \u0432 \u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0438\u0440 \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0430\u0441 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u043c. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e <a href=\"https:\/\/www.viva64.com\/ru\/pvs-studio\/\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p><a href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/498176\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/eb2\/f9c\/3bb\/eb2f9c3bb5f32f39239298d36431961c.png\"><\/div>\n<p><\/a><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Vladislav Stolyarov. <a href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/498176\/\">A Second Check of Newton Game Dynamics with PVS-Studio<\/a>.<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/498180\/\"> https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/498180\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/498180\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/uy\/ni\/sz\/uynisz7isgxhs8jv2xqvrxxlyyg.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1\"><\/div>\n<p>  \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u043c\u043d\u043e\u0439 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0432\u0438\u0436\u043e\u043a Newton Game Dynamics. \u0417\u043d\u0430\u044f, \u0447\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0451\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c PVS-Studio. \u041c\u043e\u0439 \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0437\u043c \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0441\u0442\u0435\u0433\u043d\u0443\u043b\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0410\u043d\u0434\u0440\u0435\u0439 \u041a\u0430\u0440\u043f\u043e\u0432 \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 2014 \u0433\u043e\u0434\u0443, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u044d\u0442\u043e \u0435\u0449\u0451 \u0438 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442. \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437 Newton Game Dynamics \u0434\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d 27 \u0444\u0435\u0432\u0440\u0430\u043b\u044f 2020 \u0433\u043e\u0434\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0442\u043e\u0436\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 6 \u043b\u0435\u0442. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u043c\u0438\u043c\u043e \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0434\u0432\u0438\u0436\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0430\u0433\u043e\u0432 \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-302214","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/302214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=302214"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/302214\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=302214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=302214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=302214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}