{"id":284395,"date":"2017-04-04T10:55:03","date_gmt":"2017-04-04T06:55:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=284395"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=284395","title":{"rendered":"\u0421\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u043e\u0434\u0435 CryEngine V"},"content":{"rendered":"<p><div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8c9\/d12\/e27\/8c9d12e2765248d26fda2c655fca4acc.png\" \/><\/div>\n<\/p>\n<p>  \u0412 \u043c\u0430\u0435 2016 \u0433\u043e\u0434\u0430 \u043d\u0435\u043c\u0435\u0446\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Crytek \u0440\u0435\u0448\u0438\u043b\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u0430 GitHub \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 CryEngine V. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0447\u0442\u043e \u0432\u043b\u0435\u0447\u0451\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u0434\u0435. \u041c\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio \u0434\u043b\u044f Windows, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio \u0434\u043b\u044f Linux. \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0431\u0440\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  <a href=\"https:\/\/www.cryengine.com\/\">CryEngine<\/a> \u2014 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u0438\u0436\u043e\u043a, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0435\u043c\u0435\u0446\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 <a href=\"http:\/\/www.crytek.com\/\">Crytek<\/a> \u0432 2002 \u0433\u043e\u0434\u0443, \u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 \u0448\u0443\u0442\u0435\u0440\u0435 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043b\u0438\u0446\u0430 Far Cry. \u041d\u0430 CryEngine \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u0438\u0433\u0440 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0441\u0442\u0443\u0434\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0434\u0432\u0438\u0436\u043e\u043a: Far Cry, Crysis, Entropia Universe, Blue Mars, Warface, Homefront: The Revolution, Sniper: Ghost Warrior, Armored Warfare, Evolve \u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_CryEngine_games\">\u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435<\/a>. \u0412 \u043c\u0430\u0440\u0442\u0435 2016 \u0433\u043e\u0434\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Crytek \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0432\u044b\u0445\u043e\u0434 \u0441\u0432\u043e\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 CryEngine V \u0438 \u0432\u0441\u043a\u043e\u0440\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 <a href=\"https:\/\/github.com\/CRYTEK-CRYENGINE\/CRYENGINE\">GitHub<\/a>.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 <a href=\"http:\/\/www.viva64.com\/ru\/pvs-studio\/\">PVS-Studio<\/a> \u0432\u0435\u0440\u0441\u0438\u0438 6.14 \u0434\u043b\u044f Linux. \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441\u0442\u0430\u043b\u043e \u0435\u0449\u0451 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430. \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043b\u044f Linux \u043c\u043e\u0436\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u0430\u0440\u0445\u0438\u0432\u0430 \u0438\u043b\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c <a href=\"https:\/\/www.viva64.com\/ru\/m\/0039\/\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0430\u0448 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<p>  \u0412 \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u043e\u0448\u043b\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u00abHigh\u00bb (\u0435\u0441\u0442\u044c \u0435\u0449\u0451 Medium \u0438 Low). \u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u043d\u0435 \u043e\u0441\u0438\u043b\u0438\u043b \u0434\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0432\u0441\u0435 \u00abHigh\u00bb \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u0442.\u043a. \u043f\u043e\u0447\u0442\u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u0441\u043e\u0431\u0438\u0440\u0430\u043b \u043e\u0448\u0438\u0431\u043e\u043a \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u043c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435. \u0417\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u044f \u0431\u0440\u0430\u043b\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0438 \u0434\u043e\u043b\u0433\u043e \u043d\u0435 \u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431\u0437\u043e\u0440\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0431\u0430\u0433\u0438 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0436\u0438\u0432\u0443\u0442 \u0432 \u043a\u043e\u0434\u0435 \u0443\u0436\u0435 \u043d\u0435 \u043e\u0434\u0438\u043d \u043c\u0435\u0441\u044f\u0446. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u0438\u0437 <a href=\"https:\/\/www.viva64.com\/ru\/b\/0417\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 Linux \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e. \u0412\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434:  <\/p>\n<pre><code class=\"cpp\">mkdir ~\/projects &amp;&amp; cd ~\/projects git clone https:\/\/github.com\/CRYTEK\/CRYENGINE.git cd CRYENGINE\/ git checkout main chmod +x .\/download_sdks.py .\/download_sdks.py pvs-studio-analyzer trace -- \\   sh .\/cry_waf.sh build_linux_x64_clang_profile -p gamesdk pvs-studio-analyzer analyze \\   -l \/path\/to\/PVS-Studio.lic \\   -o ~\/projects\/CRYENGINE\/cryengine.log \\   -r ~\/projects\/CRYENGINE\/ \\   -C clang++-3.8 -C clang-3.8 \\   -e ~\/projects\/CRYENGINE\/Code\/SDKs \\   -j4 plog-converter -a GA:1,2 -t tasklist \\   -o ~\/projects\/CRYENGINE\/cryengine_ga.tasks \\   ~\/projects\/CRYENGINE\/cryengine.log<\/code><\/pre>\n<p>  \u0424\u0430\u0439\u043b \u043e\u0442\u0447\u0451\u0442\u0430 <i>cryengine_ga.tasks<\/i> \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 QtCreator. \u0427\u0442\u043e \u0436\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 CryEngine V?<\/p>\n<h2>\u041d\u0435\u0441\u0447\u0430\u0441\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f Active()<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0090\/\">V501<\/a> There are identical sub-expressions to the left and to the right of the &#8216;==&#8217; operator: bActive == bActive LightEntity.h 124  <\/p>\n<pre><code class=\"cpp\">void SetActive(bool bActive) {   if (bActive == bActive)     return;    m_bActive = bActive;   OnResetState(); }<\/code><\/pre>\n<p>  \u0418\u0437-\u0437\u0430 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u041c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0431\u044b \u0431\u044b\u043b \u043a\u043e\u043d\u043a\u0443\u0440\u0441 \u00ab\u041c\u0438\u0441\u0441 \u041e\u043f\u0435\u0447\u0430\u0442\u043a\u0430\u00bb, \u0442\u043e \u044d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0442\u043e\u0447\u043d\u043e \u0431\u044b \u0437\u0430\u043d\u044f\u043b \u043f\u0435\u0440\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e. \u0414\u0443\u043c\u0430\u044e, \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0435 \u0448\u0430\u043d\u0441\u044b \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b &quot;<a href=\"https:\/\/hownot2code.com\/category\/cc-bugs-of-the-month\/\">C\/C++ bugs of the month<\/a>&quot;.<\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0451, \u0432\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430:<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/w\/V501\/\">V501<\/a> There are identical sub-expressions &#8216;m_staticObjects&#8217; to the left and to the right of the &#8216;||&#8217; operator. FeatureCollision.h 66  <\/p>\n<pre><code class=\"cpp\">class CFeatureCollision : public CParticleFeature { public:   CRY_PFX2_DECLARE_FEATURE  public:   CFeatureCollision();   ....    bool  IsActive() const  { return m_terrain ||                                    m_staticObjects ||                                    m_staticObjects; }   ....   bool m_terrain;   bool m_staticObjects;   bool m_dynamicObjects; };<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>IsActive()<\/i> \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>m_staticObjects<\/i>, \u0445\u043e\u0442\u044f \u0440\u044f\u0434\u043e\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>m_dynamicObjects<\/i>. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u043a\u043e\u0434\u0435 \u0445\u043e\u0442\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0451.<\/p>\n<h2>Code above has no bugs<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0137\/\">V547<\/a> Expression &#8216;outArrIndices[i] &lt; 0&#8217; is always false. Unsigned type value is never &lt; 0. CGFLoader.cpp 881  <\/p>\n<pre><code class=\"cpp\">static bool CompactBoneVertices(....,   DynArray&lt;uint16&gt;&amp; outArrIndices, ....)           \/\/ &lt;= uint16 {   ....   outArrIndices.resize(3 * inFaceCount, -1);    int outVertexCount = 0;   for (int i = 0; i &lt; verts.size(); ++i)   {     ....     outArrIndices[....] = outVertexCount - 1;   }    \/\/ Making sure that the code above has no bugs   \/\/ &lt;= LOL   for (int i = 0; i &lt; outArrIndices.size(); ++i)   {     if (outArrIndices[i] &lt; 0)                      \/\/ &lt;= LOL     {       return false;     }   }      return true; }<\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430. \u0412\u043e\u043e\u0431\u0449\u0435, \u0432 \u043a\u043e\u0434\u0435 CryEngine \u043d\u0443 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442 \u0441 \u043d\u0443\u043b\u0451\u043c. \u0422\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 <b>\u0441\u043e\u0442\u043d\u0438<\/b>, \u043d\u043e \u044d\u0442\u043e\u043c\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0443 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0442.\u043a. \u043a\u043e\u0434 \u043f\u0438\u0441\u0430\u043b\u0441\u044f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043e.<\/p>\n<p>  \u0422\u0430\u043a \u0432\u043e\u0442, \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u2014 <i>outArrIndices<\/i>. \u0414\u0430\u043b\u0435\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043d\u0435\u043a\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0433\u0435\u043d\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f <i>uint16<\/i>.<\/p>\n<h2>\u041e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0101\/\">V512<\/a> A call of the &#8216;memcpy&#8217; function will lead to underflow of the buffer &#8216;hashableData&#8217;. GeomCacheRenderNode.cpp 285  <\/p>\n<pre><code class=\"cpp\">void CGeomCacheRenderNode::Render(....) {   ....   CREGeomCache* pCREGeomCache = iter-&gt;second.m_pRenderElement;   ....   uint8 hashableData[] =   {     0, 0, 0, 0, 0, 0, 0, 0,     (uint8)std::distance(pCREGeomCache-&gt;....-&gt;begin(), &amp;meshData),     (uint8)std::distance(meshData....-&gt;....begin(), &amp;chunk),     (uint8)std::distance(meshData.m_instances.begin(), &amp;instance)   };    memcpy(hashableData, pCREGeomCache, sizeof(pCREGeomCache));   .... }<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>memcpy()<\/i>. \u041e\u0431\u044a\u0435\u043a\u0442 <i>pCREGeomCache<\/i> \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 <i>hashableData<\/i>, \u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>sizeof <\/i> \u043d\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f. \u0418\u0437-\u0437\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0430 \u0432\u0441\u0435\u0433\u043e 4 \u0438\u043b\u0438 8 \u0431\u0430\u0439\u0442.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0163\/\">V568<\/a> It&#8217;s odd that &#8216;sizeof()&#8217; operator evaluates the size of a pointer to a class, but not the size of the &#8216;this&#8217; class object. ClipVolumeManager.cpp 145  <\/p>\n<pre><code class=\"cpp\">void CClipVolumeManager::GetMemoryUsage(class ICrySizer* pSizer) const {   pSizer-&gt;AddObject(this, sizeof(this));   for (size_t i = 0; i &lt; m_ClipVolumes.size(); ++i)     pSizer-&gt;AddObject(m_ClipVolumes[i].m_pVolume); }<\/code><\/pre>\n<p>  \u041f\u043e\u0445\u043e\u0436\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430, \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f <i>this<\/i>. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442: <i>sizeof(*this)<\/i>.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0119\/\">V530<\/a> The return value of function &#8216;release&#8217; is required to be utilized. ClipVolumes.cpp 492  <\/p>\n<pre><code class=\"cpp\">vector&lt;unique_ptr&lt;CFullscreenPass&gt;&gt; m_jitteredDepthPassArray;  void CClipVolumesStage::PrepareVolumetricFog() {   ....   for (int32 i = 0; i &lt; m_jitteredDepthPassArray.size(); ++i)   {     m_jitteredDepthPassArray[i].release();   }    m_jitteredDepthPassArray.resize(depth);    for (int32 i = 0; i &lt; depth; ++i)   {     m_jitteredDepthPassArray[i] = CryMakeUnique&lt;....&gt;();     m_jitteredDepthPassArray[i]-&gt;SetViewport(viewport);     m_jitteredDepthPassArray[i]-&gt;SetFlags(....);   }   .... }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0443 <i>std::unique_ptr<\/i>, \u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <i>release() <\/i> \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cpp\">std::unique_ptr&lt;Foo&gt; up(new Foo()); Foo* fp = up.release(); delete fp;<\/code><\/pre>\n<p>  \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430 \u0445\u043e\u0442\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <i>reset()<\/i> \u0432\u043c\u0435\u0441\u0442\u043e <i>release()<\/i>.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0139\/\">V549<\/a> The first argument of &#8216;memcpy&#8217; function is equal to the second argument. ObjectsTree_Serialize.cpp 1135  <\/p>\n<pre><code class=\"cpp\">void COctreeNode::LoadSingleObject(....) {   ....   float* pAuxDataDst = pObj-&gt;GetAuxSerializationDataPtr(....);   const float* pAuxDataSrc = StepData&lt;float&gt;(....);   memcpy(pAuxDataDst, pAuxDataDst, min(....) * sizeof(float));   .... }<\/code><\/pre>\n<p>  \u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c <i>pAuxDataSrc<\/i> \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <i>memcpy()<\/i>. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0438 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <i>pAuxDataDst<\/i>. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d \u043e\u0442 \u043e\u043f\u0435\u0447\u0430\u0442\u043e\u043a. \u041a\u0441\u0442\u0430\u0442\u0438, \u0436\u0430\u043b\u0435\u044e\u0449\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0439\u0434\u044f \u043d\u0430\u0448 \u0442\u0435\u0441\u0442 \u043f\u043e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a: <a href=\"http:\/\/q.viva64.com\/\">q.viva64.com<\/a>.<\/p>\n<h2>\u0421\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/w\/V501\/\">V501<\/a> There are identical sub-expressions to the left and to the right of the &#8216;||&#8217; operator: val == 0 || val == \u2014 0 XMLCPB_AttrWriter.cpp 363  <\/p>\n<pre><code class=\"cpp\">void CAttrWriter::PackFloatInSemiConstType(float val, ....) {   uint32 type = PFSC_VAL;    if (val == 0 || val == -0)  \/\/ &lt;=     type = PFSC_0;   else if (val == 1)     type = PFSC_1;   else if (val == -1)     type = PFSC_N1;    .... }<\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <i>val<\/i> \u0441 \u043d\u0443\u043b\u0451\u043c \u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043d\u0443\u043b\u0451\u043c (signed zero \/ negative zero), \u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041e\u0431\u044a\u044f\u0432\u0438\u0432 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0443\u043b\u0435\u0439 \u0441\u0442\u0430\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438.<\/p>\n<p>  \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043a\u043e\u0434 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0431\u044a\u044f\u0432\u0438\u0432 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430:  <\/p>\n<pre><code class=\"cpp\">if (val == 0.0f || val == -0.0f)     type = PFSC_0;<\/code><\/pre>\n<p>  \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c, \u0442.\u043a. \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043d\u0443\u043b\u0451\u043c. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a, \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442.<\/p>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043b\u044c, \u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"http:\/\/en.cppreference.com\/w\/cpp\/numeric\/math\/signbit\">std::signbit<\/a>.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/w\/V501\/\">V501<\/a> There are identical sub-expressions &#8216;m_joints[i].limits[1][j]&#8217; to the left and to the right of the &#8216;-&#8216; operator. articulatedentity.cpp 1326  <\/p>\n<pre><code class=\"cpp\">int CArticulatedEntity::Step(float time_interval) {   ....   for (j=0;j&lt;3;j++) if (!(m_joints[i].flags &amp; angle0_locked&lt;&lt;j)&amp;&amp;     isneg(m_joints[i].limits[0][j]-m_joints[i].qext[j]) +     isneg(m_joints[i].qext[j]-m_joints[i].limits[1][j]) +      isneg(m_joints[i].limits[1][j]-m_joints[i].limits[1][j]) &lt; 2)   {     .... }<\/code><\/pre>\n<p>  \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>m_joints[i].limits[1][j]<\/i> \u0441\u0430\u043c\u043e\u0439 \u0441\u0435\u0431\u044f. \u041a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c. \u0412 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043d\u0438\u0445 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e:<\/p>\n<ul>\n<li>V501 There are identical sub-expressions &#8216;m_joints[op[1]].limits[1][i]&#8217; to the left and to the right of the &#8216;-&#8216; operator. articulatedentity.cpp 513<\/li>\n<\/ul>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0194\/\">V590<\/a> Consider inspecting this expression. The expression is excessive or contains a misprint. GoalOp_Crysis2.cpp 3779  <\/p>\n<pre><code class=\"cpp\">void COPCrysis2FlightFireWeapons::ParseParam(....) {   ....   bool paused;   value.GetValue(paused);    if (paused &amp;&amp; (m_State != eFP_PAUSED) &amp;&amp;                 (m_State != eFP_PAUSED_OVERRIDE))   {     m_NextState = m_State;     m_State = eFP_PAUSED;     m_PausedTime = 0.0f;     m_PauseOverrideTime = 0.0f;   }   else if (!paused &amp;&amp; (m_State == eFP_PAUSED) &amp;&amp;        \/\/ &lt;=                       (m_State != eFP_PAUSED_OVERRIDE)) \/\/ &lt;=   {     m_State = m_NextState;     m_NextState = eFP_STOP;      m_PausedTime = 0.0f;     m_PauseOverrideTime = 0.0f;   }   .... }<\/code><\/pre>\n<p>  \u0423\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>m_State != eFP_PAUSED_OVERRIDE<\/i>. \u0425\u043e\u0442\u044f \u043a\u043e\u043c\u0443 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e, \u044d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u044f \u0443\u0436\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0440\u0430\u043d\u0435\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 &quot;<a href=\"https:\/\/www.viva64.com\/ru\/b\/0390\/\">\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 C\/C++. \u041a\u0430\u043a \u043e\u0448\u0438\u0431\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044b<\/a>&quot;.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0118\/\">V529<\/a> Odd semicolon &#8216;;&#8217; after &#8216;for&#8217; operator. boolean3d.cpp 1077  <\/p>\n<pre><code class=\"cpp\">int CTriMesh::Slice(...) {   ....   pmd-&gt;pMesh[0]=pmd-&gt;pMesh[1] = this;  AddRef();AddRef();   for(pmd0=m_pMeshUpdate; pmd0-&gt;next; pmd0=pmd0-&gt;next); \/\/ &lt;=     pmd0-&gt;next = pmd;   .... }<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430, \u043d\u0435\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438. \u041f\u043e \u043a\u043e\u0434\u0443 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u044f\u0441\u043d\u043e: \u0442\u0443\u0442 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430?<\/p>\n<h2>\u041f\u0440\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0111\/\">V522<\/a> Dereferencing of the null pointer &#8216;pCEntity&#8217; might take place. BreakableManager.cpp 2396  <\/p>\n<pre><code class=\"cpp\">int CBreakableManager::HandlePhysics_UpdateMeshEvent(....) {   CEntity* pCEntity = 0;   ....   if (pmu &amp;&amp; pSrcStatObj &amp;&amp; GetSurfaceType(pSrcStatObj))   {     ....     if (pEffect)     {       ....       if (normal.len2() &gt; 0)         pEffect-&gt;Spawn(true, pCEntity-&gt;GetSlotWorldTM(...); \/\/ &lt;=     }   }    ....    if (iForeignData == PHYS_FOREIGN_ID_ENTITY)   {     pCEntity = (CEntity*)pForeignData;     if (!pCEntity || !pCEntity-&gt;GetPhysicalProxy())       return 1;   }   .... }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \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. \u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0438\u043b\u0438 \u043e\u0442\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0435\u043d \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432\u0435\u0442\u043a\u0430 \u043a\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <i>pCEntity<\/i>, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0443\u043b\u0451\u043c.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0205\/\">V595<\/a> The &#8216;pTrack&#8217; pointer was utilized before it was verified against nullptr. Check lines: 60, 61. AudioNode.cpp 60  <\/p>\n<pre><code class=\"cpp\">void CAudioNode::Animate(SAnimContext&amp; animContext) {   ....   const bool bMuted = gEnv-&gt;IsEditor() &amp;&amp; (pTrack-&gt;GetFlags() &amp;     IAnimTrack::eAnimTrackFlags_Muted);   if (!pTrack || pTrack-&gt;GetNumKeys() == 0 ||        pTrack-&gt;GetFlags() &amp; IAnimTrack::eAnimTrackFlags_Disabled)   {     continue;   }   .... }<\/code><\/pre>\n<p>  \u0410\u0432\u0442\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c <i>pTrack<\/i>, \u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0435\u0433\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u044d\u0442\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 <a href=\"http:\/\/www.viva64.com\/ru\/w\/V595\/\">V595<\/a> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e, \u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u044e \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u044f\u0442\u0441\u044f. \u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u0435\u0437\u0435\u043d\u0438\u044e, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0169\/\">V571<\/a> Recurring check. The &#8216;if (rLightInfo.m_pDynTexture)&#8217; condition was already verified in line 69. ObjMan.cpp 70  <\/p>\n<pre><code class=\"cpp\">\/\/ Safe memory helpers #define SAFE_RELEASE(p){ if (p) { (p)-&gt;Release(); (p) = NULL; } }  void CObjManager::UnloadVegetationModels(bool bDeleteAll) {   ....   SVegetationSpriteLightInfo&amp; rLightInfo = ....;   if (rLightInfo.m_pDynTexture)     SAFE_RELEASE(rLightInfo.m_pDynTexture);   .... }<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430 \u043d\u0435\u0442 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434, \u0435\u0441\u043b\u0438 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0443\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u043c\u0435\u0441\u0442\u043e \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<ul>\n<li>V571 Recurring check. The &#8216;if (m_pSectorGroups)&#8217; condition was already verified in line 48. PartitionGrid.cpp 50<\/li>\n<\/ul>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0175\/\">V575<\/a> The &#8216;memcpy&#8217; function doesn&#8217;t copy the whole string. Use &#8216;strcpy \/ strcpy_s&#8217; function to preserve terminal null. SystemInit.cpp 4045  <\/p>\n<pre><code class=\"cpp\">class CLvlRes_finalstep : public CLvlRes_base {   ....   for (;; )   {     if (*p == '\/' || *p == '\\\\' || *p == 0)     {       char cOldChar = *p;       *p = 0; \/\/ create zero termination       _finddata_t fd;        bool bOk = FindFile(szFilePath, szFile, fd);        if (bOk)         assert(strlen(szFile) == strlen(fd.name));        *p = cOldChar; \/\/ get back the old separator        if (!bOk)         return;        memcpy((void*)szFile, fd.name, strlen(fd.name)); \/\/ &lt;=        if (*p == 0)         break;        ++p;       szFile = p;     }     else ++p;   }   .... }<\/code><\/pre>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u0440\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 <a href=\"https:\/\/www.viva64.com\/ru\/t\/0088\/\">\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043b\u044c<\/a>. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c <i>strlen() + 1<\/i> \u0441\u0438\u043c\u0432\u043e\u043b, \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a: <i>strcpy <\/i> \u0438\u043b\u0438 <i>strcpy_s<\/i>.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0110\/\">V521<\/a> Such expressions using the &#8216;,&#8217; operator are dangerous. Make sure the expression &#8216;!sWords[iWord].empty(), iWord ++&#8217; is correct. TacticalPointSystem.cpp 3243  <\/p>\n<pre><code class=\"cpp\">bool CTacticalPointSystem::Parse(....) const {   string sInput(sSpec);   const int MAXWORDS = 8;   string sWords[MAXWORDS];    int iC = 0, iWord = 0;   for (; iWord &lt; MAXWORDS; !sWords[iWord].empty(), iWord++) \/\/ &lt;=   {     sWords[iWord] = sInput.Tokenize(&quot;_&quot;, iC);   }   .... }<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u044e \u0446\u0438\u043a\u043b\u0430 <i>for<\/i> \u0441 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c\u0438. \u0427\u0442\u043e \u0442\u0430\u043c \u0434\u0435\u043b\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435? \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0435\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">for (; iWord &lt; MAXWORDS &amp;&amp; !sWords[iWord].empty(); iWord++) {...}<\/code><\/pre>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/w\/V521\/\">V521<\/a> Such expressions using the &#8216;,&#8217; operator are dangerous. Make sure the expression is correct. HommingSwarmProjectile.cpp 187  <\/p>\n<pre><code class=\"cpp\">void CHommingSwarmProjectile::HandleEvent(....) {   ....   explodeDesc.normal = -pCollision-&gt;n,pCollision-&gt;vloc[0];   .... }<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c &#8216;,&#8217;.<\/p>\n<h2>\u041f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/w\/V571\/\">V571<\/a> Recurring check. The &#8216;if (pos == npos)&#8217; condition was already verified in line 1530. CryString.h 1539  <\/p>\n<pre><code class=\"cpp\">\/\/! Find last single character. \/\/ \\return -1 if not found, distance from beginning otherwise. template&lt;class T&gt; inline typename CryStringT&lt;T&gt;::....::rfind(....) const {   const_str str;   if (pos == npos)   {     \/\/ find last single character     str = _strrchr(m_str, ch);     \/\/ return -1 if not found, distance from beginning otherwise     return (str == NULL) ?       (size_type) - 1 : (size_type)(str - m_str);   }   else   {     if (pos == npos)     {       pos = length();     }     if (pos &gt; length())     {       return npos;     }      value_type tmp = m_str[pos + 1];     m_str[pos + 1] = 0;     str = _strrchr(m_str, ch);     m_str[pos + 1] = tmp;   }   return (str == NULL) ?    (size_type) - 1 : (size_type)(str - m_str); }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>pos<\/i>. \u0418\u0437-\u0437\u0430 \u0442\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u043a\u043e\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0448\u0435.<\/p>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0431\u043b\u0430\u0433\u043e\u043f\u043e\u043b\u0443\u0447\u043d\u043e \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0435\u0449\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435:<\/p>\n<ul>\n<li>V571 Recurring check. The &#8216;if (pos == npos)&#8217; condition was already verified in line 1262. CryFixedString.h 1271<\/li>\n<\/ul>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0112\/\">V523<\/a> The &#8216;then&#8217; statement is equivalent to the &#8216;else&#8217; statement. ScriptTable.cpp 789  <\/p>\n<pre><code class=\"cpp\">bool CScriptTable::AddFunction(const SUserFunctionDesc&amp; fd) {   ....   char sFuncSignature[256];   if (fd.sGlobalName[0] != 0)     cry_sprintf(sFuncSignature, &quot;%s.%s(%s)&quot;, fd.sGlobalName,       fd.sFunctionName, fd.sFunctionParams);   else     cry_sprintf(sFuncSignature, &quot;%s.%s(%s)&quot;, fd.sGlobalName,       fd.sFunctionName, fd.sFunctionParams);   .... }<\/code><\/pre>\n<p>  \u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u043a\u0438, \u0435\u0451 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0422\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0442\u043e\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0432\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>V523 The &#8216;then&#8217; statement is equivalent to the &#8216;else&#8217; statement. BudgetingSystem.cpp 718<\/li>\n<li>V523 The &#8216;then&#8217; statement is equivalent to the &#8216;else&#8217; statement. D3DShadows.cpp 627<\/li>\n<li>V523 The &#8216;then&#8217; statement is equivalent to the &#8216;else&#8217; statement. livingentity.cpp 967<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0225\/\">V610<\/a> Undefined behavior. Check the shift operator &#8216;&lt;&lt;&#8216;. The left operand &#8216;-1&#8217; is negative. physicalplaceholder.h 25  <\/p>\n<pre><code class=\"cpp\">class CPhysicalEntity; const int NO_GRID_REG = -1&lt;&lt;14; const int GRID_REG_PENDING = NO_GRID_REG+1; const int GRID_REG_LAST = NO_GRID_REG+2;<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0443\u043c\u0435\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u043e\u0432 \u043e\u0448\u0438\u0431\u043e\u043a, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0438\u0445 \u043a \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 \u044f\u0437\u044b\u043a\u0430, \u0441\u0434\u0432\u0438\u0433 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432\u043b\u0435\u0432\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e.<\/p>\n<p>  \u0412\u043e\u0442 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0441\u0442:<\/p>\n<ul>\n<li>V610 Undefined behavior. Check the shift operator &#8216;&lt;&lt;&#8216;. The left operand &#8216;~(TFragSeqStorage(0))&#8217; is negative. UDPDatagramSocket.cpp 757<\/li>\n<li>V610 Undefined behavior. Check the shift operator &#8216;&lt;&lt;&#8216;. The right operand (&#8216;cpu&#8217; = [0..1023]) is greater than or equal to the length in bits of the promoted left operand. CryThreadUtil_posix.h 115<\/li>\n<li>V610 Undefined behavior. Check the shift operator &#8216;&gt;&gt;&#8217;. The right operand is negative (&#8216;comp&#8217; = [-1..3]). ShaderComponents.cpp 399<\/li>\n<li>V610 Undefined behavior. Check the shift operator &#8216;&lt;&lt;&#8216;. The left operand &#8216;-1&#8217; is negative. trimesh.cpp 4126<\/li>\n<li>V610 Undefined behavior. Check the shift operator &#8216;&lt;&lt;&#8216;. The left operand &#8216;-1&#8217; is negative. trimesh.cpp 4559<\/li>\n<li>V610 Unspecified behavior. Check the shift operator &#8216;&gt;&gt;&#8217;. The left operand &#8216;-NRAYS&#8217; is negative. trimesh.cpp 4618<\/li>\n<li>V610 Undefined behavior. Check the shift operator &#8216;&lt;&lt;&#8216;. The left operand &#8216;-1&#8217; is negative. tetrlattice.cpp 324<\/li>\n<li>V610 Undefined behavior. Check the shift operator &#8216;&lt;&lt;&#8216;. The left operand &#8216;-1&#8217; is negative. tetrlattice.cpp 350<\/li>\n<li>V610 Undefined behavior. Check the shift operator &#8216;&lt;&lt;&#8216;. The left operand &#8216;-1&#8217; is negative. tetrlattice.cpp 617<\/li>\n<li>V610 Undefined behavior. Check the shift operator &#8216;&lt;&lt;&#8216;. The left operand &#8216;-1&#8217; is negative. tetrlattice.cpp 622<\/li>\n<\/ul>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0439 \u0442\u0438\u043f \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043d\u0435\u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0162\/\">V567<\/a> Undefined behavior. The &#8216;m_current&#8217; variable is modified while being used twice between sequence points. OperatorQueue.cpp 101  <\/p>\n<pre><code class=\"cpp\">boolCOperatorQueue::Prepare(....) {   ++m_current &amp;= 1;   m_ops[m_current].clear();   return true; }<\/code><\/pre>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0442\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0432 \u043a\u043e\u0434\u0435:<\/p>\n<ul>\n<li>V567 Undefined behavior. The &#8216;m_commandBufferIndex&#8217; variable is modified while being used twice between sequence points. XConsole.cpp 180<\/li>\n<li>V567 Undefined behavior. The &#8216;itail&#8217; variable is modified while being used twice between sequence points. trimesh.cpp 3119<\/li>\n<li>V567 Undefined behavior. The &#8216;ihead&#8217; variable is modified while being used twice between sequence points. trimesh.cpp 3126<\/li>\n<li>V567 Undefined behavior. The &#8216;ivtx&#8217; variable is modified while being used twice between sequence points. boolean3d.cpp 957<\/li>\n<li>V567 Undefined behavior. The &#8216;ivtx&#8217; variable is modified while being used twice between sequence points. boolean3d.cpp 965<\/li>\n<li>V567 Undefined behavior. The &#8216;ivtx&#8217; variable is modified while being used twice between sequence points. boolean3d.cpp 983<\/li>\n<li>V567 Undefined behavior. The &#8216;m_iNextAnimIndex&#8217; variable is modified while being used twice between sequence points. HitDeathReactionsDefs.cpp 192<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0412\u043e\u043f\u0440\u043e\u0441\u044b \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c<\/h2>\n<p>  \u0412 \u043a\u043e\u0434\u0435 CryEngine V \u044f \u043d\u0430\u0448\u0451\u043b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>  \u0412\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u0448\u0451\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f:<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/w\/V763\/\">V763<\/a> Parameter &#8216;enable&#8217; is always rewritten in function body before being used.  <\/p>\n<pre><code class=\"cpp\">void CNetContext::EnableBackgroundPassthrough(bool enable) {   SCOPED_GLOBAL_LOCK;   \/\/ THIS IS A TEMPORARY HACK TO MAKE THE GAME PLAY NICELY,   \/\/ ASK peter@crytek WHY IT'S STILL HERE   enable = false;   .... }<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e\u0438\u043a\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u044b \u0438 \u0432\u044b\u043f\u0438\u0441\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u0442:  <\/p>\n<pre><code class=\"cpp\">.... \/\/ please ask me when you want to change [tetsuji] .... \/\/ please ask me when you want to change [dejan] .... \/\/if there are problems with this function, ask Ivo uint32 numAnims =    pCharacter-&gt;GetISkeletonAnim()-&gt;GetNumAnimsInFIFO(layer); if (numAnims)   return pH-&gt;EndFunction(true); .... \/\/ask Ivo for details \/\/if (pCharacter-&gt;GetCurAnimation() &amp;&amp; \/\/    pCharacter-&gt;GetCurAnimation()[0] != '\\0') \/\/  return pH-&gt;EndFunction(pCharacter-&gt;GetCurAnimation()); .... \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ \/\/ Strange, !do not remove... ask Timur for the meaning of this. \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ if (m_nStrangeRatio &gt; 32767) {   gEnv-&gt;pScriptSystem-&gt;SetGCFrequency(-1); \/\/ lets get nasty. } \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ \/\/ Strange, !do not remove... ask Timur for the meaning of this. \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ if (m_nStrangeRatio &gt; 1000) {   if (m_pProcess &amp;&amp; (m_pProcess-&gt;GetFlags() &amp; PROC_3DENGINE))     m_nStrangeRatio += cry_random(1, 11); } \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ .... \/\/ tank specific: \/\/ avoid steering input around 0.5 (ask Anton) .... CryWarning(VALIDATOR_MODULE_EDITOR, VALIDATOR_WARNING,   &quot;....: Wrong edited item. Ask AlexL to fix this.&quot;); .... \/\/ If this renders black ask McJohn what's wrong. glGenerateMipmap(GL_TEXTURE_2D); ....<\/code><\/pre>\n<p>  \u041d\u0443 \u0438 \u0441\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c: \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430? \u042f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438\u043c\u0435\u044e \u0432 \u0432\u0438\u0434\u0443 PVS-Studio. \ud83d\ude42<\/p>\n<p>  \u0415\u0449\u0435 \u0440\u0430\u0437 \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a. \u042f \u043d\u0435 \u0434\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0434\u0430\u0436\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0443\u0440\u043e\u0432\u043d\u044f High. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0435\u0449\u0451 \u0436\u0434\u0435\u0442 \u0442\u0435\u0445, \u043a\u0442\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442 \u0435\u0433\u043e. \u042f, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043c\u0435\u043d\u044f <a href=\"https:\/\/github.com\/viva64\/pvs-studio-check-list\">\u0436\u0434\u0443\u0442<\/a> \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0417\u0430 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043a\u043e\u0434\u0430 \u044f \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043b\u044e\u0434\u0435\u0439 \u0443\u0436\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a. \u041d\u0435\u0442, \u044f \u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 Code Review, \u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0441\u0430\u043c\u0438, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044e, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0437\u043e\u0440 \u043a\u043e\u0434\u0430 10 \u0447\u0435\u043b\u043e\u0432\u0435\u043a? \u0410 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0434\u0435\u043d\u044c? \u0410 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043b\u044e\u0434\u0435\u0439? \u0412 \u0442\u0430\u043a\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 Code Review \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0451\u043c\u0430\u0445 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u0436\u0435 \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u0434\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0432 \u043b\u0443\u0447\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u042d\u0442\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0442\u0435\u0441\u0442\u0430\u043c, \u0430 \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u043d\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 (\u043a \u0441\u043b\u043e\u0432\u0443, \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u0442\u043e\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430). \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0442\u0435\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432, \u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0435 \u043d\u0435\u0441\u0443\u0442 \u0443\u0436\u0435 \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b.<\/p>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c PVS-Studio \u043c\u043e\u0436\u043d\u043e \u043f\u043e <a href=\"https:\/\/www.viva64.com\/ru\/pvs-studio\/\">\u044d\u0442\u043e\u0439<\/a> \u0441\u0441\u044b\u043b\u043a\u0435.<\/p>\n<p>  \u041e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0446\u0435\u043d\u044b \u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441\u043a\u0438\u0434\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u043d\u0430\u043c \u0432 <a href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443<\/a>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/155\/2e8\/844\/1552e884478a68aa15094982454f64c3.png\" alt=\"Picture 3\"\/><\/p>\n<p>  \u041d\u0435 \u043e\u0433\u043e\u0440\u0447\u0430\u0439\u0442\u0435 \u0435\u0434\u0438\u043d\u043e\u0440\u043e\u0433\u0430 \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u0434\u043e\u043c\u2026<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/b\/0495\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8d2\/41b\/5bf\/8d241b5bf34747169141ed7c1997143b.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: Svyatoslav Razmyslov. <a href=\"http:\/\/www.viva64.com\/en\/b\/0495\/\">Critical errors in CryEngine V code<\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441?<\/b><\/p>\n<div class=\"spoiler_text\">\u0427\u0430\u0441\u0442\u043e \u043a \u043d\u0430\u0448\u0438\u043c \u0441\u0442\u0430\u0442\u044c\u044f\u043c \u0437\u0430\u0434\u0430\u044e\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043d\u0438\u0445 \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0437\u0434\u0435\u0441\u044c: <a href=\"http:\/\/www.viva64.com\/ru\/a\/0085\/\">\u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e PVS-Studio, \u0432\u0435\u0440\u0441\u0438\u044f 2015<\/a>. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c.<\/div>\n<\/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:\/\/habrahabr.ru\/post\/325600\/\"> https:\/\/habrahabr.ru\/post\/325600\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8c9\/d12\/e27\/8c9d12e2765248d26fda2c655fca4acc.png\" \/><\/div>\n<\/p>\n<p>  \u0412 \u043c\u0430\u0435 2016 \u0433\u043e\u0434\u0430 \u043d\u0435\u043c\u0435\u0446\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Crytek \u0440\u0435\u0448\u0438\u043b\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u0430 GitHub \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 CryEngine V. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0447\u0442\u043e \u0432\u043b\u0435\u0447\u0451\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u0434\u0435. \u041c\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio \u0434\u043b\u044f Windows, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio \u0434\u043b\u044f Linux. \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0431\u0440\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.  <\/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-284395","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/284395","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=284395"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/284395\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=284395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=284395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=284395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}