{"id":277827,"date":"2016-04-07T11:45:02","date_gmt":"2016-04-07T07:45:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=277827"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=277827","title":{"rendered":"\u041f\u043b\u043e\u0445\u043e\u0439 \u043a\u043e\u0434 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f 2D-\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439 Toonz"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b3d\/ece\/34c\/b3dece34ceb088220465fe2f1817223a.png\" align=\"left\"\/>\u041d\u0430 \u0434\u043d\u044f\u0445 \u0441\u0442\u0430\u043b\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e Digital Video, \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 TOONZ, \u0438 \u044f\u043f\u043e\u043d\u0441\u043a\u0438\u0439 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044c DWANGO \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0438 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 DWANGO \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Toonz, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f 2D \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. <\/p>\n<p>  \u041f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c\u0438, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442 \u043e\u0431\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a OpenToonz, \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Toonz. \u041e\u043d \u0442\u0430\u043a \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 Studio Ghibli, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0421 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Studio Ghibli \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u00ab\u0425\u043e\u0434\u044f\u0447\u0438\u0439 \u0437\u0430\u043c\u043e\u043a \u0425\u043e\u0443\u043b\u0430\u00bb, \u00ab\u0423\u043d\u0435\u0441\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0437\u0440\u0430\u043a\u0430\u043c\u0438\u00bb, \u00ab\u0420\u044b\u0431\u043a\u0443 \u041f\u043e\u043d\u044c\u043e\u00bb, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0430\u0440\u0442\u0438\u043d. \u0412 \u0438\u0445 \u0447\u0438\u0441\u043b\u0435 \u0442\u0430\u043a \u0436\u0435 \u043c\u0443\u043b\u044c\u0442\u0444\u0438\u043b\u044c\u043c \u00ab\u0424\u0443\u0442\u0443\u0440\u0430\u043c\u0430\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u043b \u043c\u0435\u043d\u044f \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0440\u0430\u0437\u043e\u0431\u043b\u0430\u0447\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 OpenToonz.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>  <a href=\"https:\/\/opentoonz.github.io\/e\/index.html\">OpenToonz<\/a> \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f 2D \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u041e\u0441\u043d\u043e\u0432\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u00abToonz\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0438\u0442\u0430\u043b\u044c\u044f\u043d\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Digital Video. \u0410\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u044d\u0442\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, Studio Ghibli \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0435\u0435 \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442. \u041a\u0440\u043e\u043c\u0435 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d \u043f\u0440\u043e\u0435\u043a\u0442 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u0438 \u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u2014 Discworld 2 \u0438 Claw.<\/p>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0446\u0435\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 $10000, \u043d\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0436\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435\u0433\u043e. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u2014 \u043d\u0430\u0445\u043e\u0434\u043a\u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0420\u0430\u0437\u043c\u0435\u0440 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 OpenToonz \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 1\/10 \u044f\u0434\u0440\u0430 FreeBSD, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e <a href=\"http:\/\/www.viva64.com\/en\/b\/0377\/\">\u0431\u043e\u043b\u0435\u0435 40 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0438\u0445 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435! <\/p>\n<p>  OpenToonz \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f \u0432 Visual Studio 2013 \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\u0442\u043e\u0440\u0430 <a href=\"http:\/\/www.viva64.com\/en\/pvs-studio\/\">PVS-Studio<\/a> \u0432\u0435\u0440\u0441\u0438\u0438 6.03, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u044f\u0437\u044b\u043a\u0438 C\/C++\/C#, \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0415\u0449\u0451 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044f \u043d\u0430\u0441\u0442\u043e\u0440\u043e\u0436\u0438\u043b\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0441\u0442\u0438. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e 1211 \u0448\u0442\u0443\u043a! \u0422.\u0435. \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044e \u0437\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0443\u0434\u0435\u043b\u044f\u043b\u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b <i>#pragma warning<\/i>, \u043d\u043e \u0434\u0430\u0436\u0435 \u0442\u0443\u0442 \u0431\u044b\u043b\u0438 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0438\u0436\u0435. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0430\u043c\u044b\u0445 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u043d\u043e\u0432\u0438\u0447\u043a\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435 \u0438\u0437\u0443\u0447\u0430\u0442\u044c C\/C++. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u044f \u043d\u0430\u0447\u043d\u0443 \u0441 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<h2>\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4e3\/f0c\/b2c\/4e3f0cb2c71e63c73f5f2e75acde9584.png\" \/><\/div>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0226\/\">V611<\/a> The memory was allocated using &#8216;new&#8217; operator but was released using the &#8216;free&#8217; function. Consider inspecting operation logics behind the &#8216;row&#8217; variable. motionblurfx.cpp 288  <\/p>\n<pre><code class=\"cpp\">template &lt;class T&gt; void doDirectionalBlur(....) {   T *row, *buffer;   ....   row = new T[lx + 2 * brad + 2]; \/\/ &lt;=   if (!row)     return;   memset(row, 0, (lx + 2 * brad + 2) * sizeof(T));   ....   free(row);                      \/\/ &lt;=   r-&gt;unlock(); }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>new []<\/i> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>delete []<\/i>. \u0418\u043c\u0435\u043d\u043d\u043e \u0441 \u0434\u0432\u0443\u043c\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438! \u042f \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u0443\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u043e\u043c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u2014 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0226\/\">V611<\/a> The memory was allocated using &#8216;new T[]&#8217; operator but was released using the &#8216;delete&#8217; operator. Consider inspecting this code. It&#8217;s probably better to use &#8216;delete [] uPrime;&#8217;. tstroke.cpp 3353  <\/p>\n<pre><code class=\"cpp\">double *reparameterize3D(....) {   double *uPrime = new double[size]; \/\/ &lt;=    for (int i = 0; i &lt; size; i++) {     uPrime[i] = NewtonRaphsonRootFind3D(....);     if (!_finite(uPrime[i])) {       delete uPrime;                 \/\/ &lt;=       return 0;     }   }   .... }<\/code><\/pre>\n<p>  \u0412 \u044f\u0437\u044b\u043a\u0435 C++ \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b <i>new<\/i>\/<i>delete <\/i> \u0438 <i>new[]<\/i>\/<i>delete[]<\/i> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0435 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0435 \u043f\u0430\u043c\u044f\u0442\u044c, \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0430\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c <i>uPrime<\/i>, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0430.<\/p>\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. \u0415\u0449\u0451 20 \u043c\u0435\u0441\u0442 \u044f \u0432\u044b\u043f\u0438\u0441\u0430\u043b \u0432 \u0444\u0430\u0439\u043b <a href=\"http:\/\/www.viva64.com\/external-pictures\/OpenToonz_V611.txt\">OpenToonz_V611.txt<\/a>.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0145\/\">V554<\/a> Incorrect use of auto_ptr. The memory allocated with &#8216;new []&#8217; will be cleaned using &#8216;delete&#8217;. screensavermaker.cpp 29  <\/p>\n<pre><code class=\"cpp\">void makeScreenSaver(....) {   ....   std::auto_ptr&lt;char&gt; swf(new char[swfSize]);   .... }<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u2014 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>delete <\/i> \u00ab\u0441\u043f\u0440\u044f\u0442\u0430\u043d\u00bb \u0432\u043d\u0443\u0442\u0440\u044c \u0443\u043c\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f <i>std::auto_ptr<\/i>. \u042d\u0442\u043e \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. <\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>delete []<\/i>. <\/p>\n<p>  \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cpp\">std::unique_ptr&lt;char[]&gt; swf(new char[swfSize]); <\/code><\/pre>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0210\/\">V599<\/a> The destructor was not declared as a virtual one, although the &#8216;TTileSet&#8217; class contains virtual functions. cellselection.cpp 891  <\/p>\n<pre><code class=\"cpp\">void redo() const {   insertLevelAndFrameIfNeeded();   TTileSet *tiles;  \/\/ &lt;=   bool isLevelCreated;   pasteRasterImageInCellWithoutUndo(...., &amp;tiles, ....);   delete tiles;     \/\/ &lt;=   TApp::instance()-&gt;getCurrentXsheet()-&gt;notifyXsheetChanged(); }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0443\u0442\u0435\u0447\u043a\u0430\u0445 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <i>TTileSet<\/i>.<\/p>\n<p>  \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <i>TTileSet<\/i>:  <\/p>\n<pre><code class=\"cpp\">class DVAPI TTileSet {   .... protected:   TDimension m_srcImageSize;    typedef std::vector&lt;Tile *&gt; Tiles;   Tiles m_tiles;  public:   TTileSet(const TDimension &amp;dim) : m_srcImageSize(dim)   {   }   ~TTileSet();      \/\/ &lt;=   ....   virtual void add(const TRasterP &amp;ras, TRect rect) = 0;   ....   virtual TTileSet *clone() const = 0; };<\/code><\/pre>\n<p>  \u041a\u043b\u0430\u0441\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0438\u0441\u0442\u044b\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u043c. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0443 <i>TTileSet <\/i> (\u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0435\u0441\u0442\u044c, \u043d\u043e \u043e\u043d \u043d\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043a\u0430\u043a \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439) \u0432\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0447\u0438\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  \u0412 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 OpenToonz \u044f \u043d\u0430\u0448\u0451\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043e\u0442 <i>TTileSet<\/i>:  <\/p>\n<pre><code class=\"cpp\">class DVAPI TTileSetCM32 : public TTileSet class DVAPI TTileSetCM32 : public TTileSet class DVAPI TTileSetFullColor : public TTileSet class DVAPI Tile : public TTileSet::Tile<\/code><\/pre>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (\u0438\u043b\u0438 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u043d\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432) \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\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 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b; \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0443\u0442\u0435\u0447\u043a\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0438\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0449\u0451 \u0434\u0432\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043c\u0435\u0441\u0442\u0430:<\/p>\n<ul>\n<li>V599 The virtual destructor is not present, although the &#8216;MessageParser&#8217; class contains virtual functions. tipcsrv.cpp 91<\/li>\n<li>V599 The virtual destructor is not present, although the &#8216;ColumnToCurveMapper&#8217; class contains virtual functions. functionselection.cpp 278<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041e\u043f\u0430\u0441\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3bb\/fd2\/a70\/3bbfd2a70345c1fd9bf23ef9cd4f4792.png\" \/><\/div>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0092\/\">V503<\/a> This is a nonsensical comparison: pointer &lt; 0. styleselection.cpp 104  <\/p>\n<pre><code class=\"cpp\">bool pasteStylesDataWithoutUndo(....) {   ....   if (palette-&gt;getStylePage(styleId) &lt; 0) { \/\/ &lt;=     \/\/ styleId non e' utilizzato: uso quello     \/\/ (cut\/paste utilizzato per spostare stili)     palette-&gt;setStyle(styleId, style);   } else {     \/\/ styleId e' gia' utilizzato. ne devo prendere un altro     styleId = palette-&gt;getFirstUnpagedStyle();     if (styleId &gt;= 0)       palette-&gt;setStyle(styleId, style);     else       styleId = palette-&gt;addStyle(style);   }   .... }<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <i>getStylePage()<\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0435\u043a\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443: <i>TPalette::Page*<\/i>. \u0422\u0430\u043a\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u043d\u0443\u043b\u0451\u043c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430. \u0421\u0434\u0435\u043b\u0430\u0432 \u043f\u043e\u0438\u0441\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>getStylePage()<\/i>, \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0438 \u043d\u0435\u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u043d\u0443\u043b\u044e, \u0430 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0111\/\">V522<\/a> Dereferencing of the null pointer &#8216;region&#8217; might take place. Check the logical condition. palettecmd.cpp 102  <\/p>\n<pre><code class=\"cpp\">bool isStyleUsed(const TVectorImageP vi, int styleId) {   ....   TRegion *region = vi-&gt;getRegion(i);   if (region || region-&gt;getStyle() != styleId)     return true;   .... }<\/code><\/pre>\n<p>  \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b &#8216;&amp;&amp;&#8217; \u0438 &#8216;||&#8217;. \u0418\u043d\u0430\u0447\u0435, \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <i>region<\/i> \u0431\u0443\u0434\u0435\u0442 \u043d\u0443\u043b\u0435\u0432\u044b\u043c, \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0435\u0433\u043e \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0230\/\">V614<\/a> Potentially uninitialized pointer &#8216;socket&#8217; used. Consider checking the first actual argument of the &#8216;connect&#8217; function. tmsgcore.cpp 36  <\/p>\n<pre><code class=\"cpp\">void TMsgCore::OnNewConnection() \/\/server side {   QTcpSocket *socket;   if (m_tcpServer)                                 \/\/ &lt;=     socket = m_tcpServer-&gt;nextPendingConnection(); \/\/ &lt;=   assert(socket);    bool ret = connect(socket, ....);                \/\/ &lt;=   ret = ret &amp;&amp; connect(socket, ....);              \/\/ &lt;=   assert(ret);   m_sockets.insert(socket); }<\/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\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f <i>socket<\/i>. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>m_tcpServer<\/i> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 false, \u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d. \u0412 \u0442\u0430\u043a\u043e\u043c \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e connect().<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0205\/\">V595<\/a> The &#8216;batchesTask&#8217; pointer was utilized before it was verified against nullptr. Check lines: 1064, 1066. batches.cpp 1064  <\/p>\n<pre><code class=\"cpp\">void BatchesController::update() {   ....   TFarmTask *batchesTask = getTask(batchesTaskId);   \/\/ &lt;=   TFarmTask farmTask = *batchesTask;                 \/\/ &lt;=    if (batchesTask) {                                 \/\/ &lt;=     QString batchesTaskParentId = batchesTask-&gt;m_parentId;     m_controller-&gt;queryTaskInfo(farmTaskId, farmTask);     int chunkSize = batchesTask-&gt;m_chunkSize;     *batchesTask = farmTask;     batchesTask-&gt;m_chunkSize = chunkSize;     batchesTask-&gt;m_id = batchesTaskId;     batchesTask-&gt;m_parentId = batchesTaskParentId;   }   .... }<\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \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. \u041e\u0431\u044b\u0447\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u043e\u0434\u043d\u043e \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <i>batchesTask<\/i>, \u043d\u043e \u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u043e\u0434\u043d\u043e \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  \u0415\u0449\u0451 29 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043c\u0435\u0441\u0442 \u044f \u0432\u044b\u043f\u0438\u0441\u0430\u043b \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"http:\/\/www.viva64.com\/external-pictures\/OpenToonz_V595.txt\">OpenToonz_V595.txt<\/a>.<\/p>\n<h2>\u041e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/553\/d47\/0e8\/553d470e8488fa885e1b2e7ebe43e3f5.png\" \/><\/div>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0119\/\">V530<\/a> The return value of function &#8216;toUpper&#8217; is required to be utilized. sceneviewerevents.cpp 847  <\/p>\n<pre><code class=\"cpp\">void SceneViewer::keyPressEvent(QKeyEvent *event) {   ....   QString text = event-&gt;text();   if ((event-&gt;modifiers() &amp; Qt::ShiftModifier))     text.toUpper();   .... }<\/code><\/pre>\n<p>  \u041c\u0435\u0442\u043e\u0434 toUpper() \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 &#8216;text&#8217;. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043e\u043d \u043e\u043f\u0438\u0441\u0430\u043d \u043a\u0430\u043a QString QString::toUpper() const, \u0442.\u0435. \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c.<\/p>\n<p>  \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cpp\">QString text = event-&gt;text();   if ((event-&gt;modifiers() &amp; Qt::ShiftModifier))     text = text.toUpper();<\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0435\u0449\u0451 \u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0412\u0441\u0435 \u044d\u0442\u0438 \u043c\u0435\u0441\u0442\u0430 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>V530 The return value of function &#8216;left&#8217; is required to be utilized. tfarmserver.cpp 569<\/li>\n<li>V530 The return value of function &#8216;ftell&#8217; is required to be utilized. tiio_bmp.cpp 804<\/li>\n<li>V530 The return value of function &#8216;accumulate&#8217; is required to be utilized. bendertool.cpp 374<\/li>\n<\/ul>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0230\/\">V614<\/a> Uninitialized iterator &#8216;it1&#8217; used. fxcommand.cpp 2096  <\/p>\n<pre><code class=\"cpp\">QString DeleteLinksUndo::getHistoryString() {   ....   std::list&lt;TFxP&gt;::const_iterator it1; \/\/ &lt;=   std::list&lt;TFx *&gt;::const_iterator ft;   for (ft = m_terminalFxs.begin(); ft != ....end(); ++ft) {     if (ft != m_terminalFxs.begin())       str += QString(&quot;,  &quot;);     str += QString(&quot;%1- -Xsheet&quot;)           .arg(QString::fromStdWString((*it1)-&gt;getName())); \/\/ &lt;=   }   .... }<\/code><\/pre>\n<p>  \u0412 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 <i>it1<\/i>. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0435\u0433\u043e \u0437\u0430\u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 <i>ft<\/i>.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0260\/\">V642<\/a> Saving the &#8216;_wcsicmp&#8217; function result inside the &#8216;char&#8217; type variable is inappropriate. The significant bits could be lost breaking the program&#8217;s logic. tfilepath.cpp 328  <\/p>\n<pre><code class=\"cpp\">bool TFilePath::operator&lt;(const TFilePath &amp;fp) const {   ....   char differ;   differ = _wcsicmp(iName.c_str(), jName.c_str());   if (differ != 0)     return differ &lt; 0 ? true : false;   .... }<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <i>_wcsicmp<\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <i>int<\/i>:<\/p>\n<ul>\n<li>&lt; 0 \u2014 <i>string1<\/i> less then <i>string2<\/i>;<\/li>\n<li>0 \u2014 <i>string1<\/i> identical to <i>string2<\/i>;<\/li>\n<li>&gt; 0 \u2014 <i>string1<\/i> greater than <i>string2<\/i>.<\/li>\n<\/ul>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. &#8216;&gt; 0&#8217;\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043b\u044e\u0431\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0430 \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 1. \u042d\u0442\u0438\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c: 2, 3, 100, 256, 1024, 5555, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <i>_wcsicmp<\/i> \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0438\u043f\u0430 char, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0451\u0442 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0261\/\">V643<\/a> Unusual pointer arithmetic: &quot;\\\\&quot; + v[i]. The value of the &#8216;char&#8217; type is being added to the string pointer. tstream.cpp 31  <\/p>\n<pre><code class=\"cpp\">string escape(string v) {   int i = 0;   for (;;) {     i = v.find_first_of(&quot;\\\\\\'\\&quot;&quot;, i);     if (i == (int)string::npos)       break;     string h = &quot;\\\\&quot; + v[i]; \/\/ &lt;=     v.insert(i, &quot;\\\\&quot;);     i = i + 2;   }   return v; }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043e\u0448\u0438\u0431\u043a\u0443, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c\u0443 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b. \u041e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043a \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b, \u043d\u043e \u043a \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u0445\u043e\u0434\u0443 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0439, \u0432\u043e\u0442 \u0447\u0435\u043c\u0443 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cpp\">const char *p1 = &quot;\\\\&quot;; const int delta = v[i]; const char *p2 = *p1 + delta; string h = p2;<\/code><\/pre>\n<p>  \u041a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cpp\">string h = string(&quot;\\\\&quot;) + v[i];<\/code><\/pre>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0276\/\">V655<\/a> The strings were concatenated but are not utilized. Consider inspecting the &#8216;alias + &quot;]&quot;&#8217; expression. plasticdeformerfx.cpp 150  <\/p>\n<pre><code class=\"cpp\">string PlasticDeformerFx::getAlias(....) const {   std::string alias(getFxType());   alias += &quot;[&quot;;   ....   if (sd)     alias += &quot;, &quot;+toString(sd, meshColumnObj-&gt;paramsTime(frame));    alias + &quot;]&quot;; \/\/ &lt;=    return alias; }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;+&#8217;, \u0432\u043c\u0435\u0441\u0442\u043e &#8216;+=&#8217;. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u043a \u0441\u0442\u0440\u043e\u043a\u0435 <i>alias<\/i> \u043d\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u043a\u043e\u0431\u043a\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435, \u043a\u0430\u043a \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442.<\/p>\n<h2>\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b29\/2d2\/1b3\/b292d21b305fe0a5d56afa81b45c3e9f.png\" \/><\/div>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0206\/\">V596<\/a> The object was created but it is not being used. The &#8216;throw&#8217; keyword could be missing: throw domain_error(FOO); pluginhost.cpp 1486  <\/p>\n<pre><code class=\"cpp\">void Loader::doLoad(const QString &amp;file) {   ....   int ret = pi-&gt;ini_(host);   if (ret) {     delete host;     std::domain_error(&quot;failed initialized: error on ....&quot;);   }   .... }<\/code><\/pre>\n<p>  \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0437\u0430\u0431\u044b\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <i>throw<\/i>. \u041f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u2014 \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cpp\">throw std::domain_error(&quot;failed initialized: error on ....&quot;);<\/code><\/pre>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0436\/\">V746<\/a> Type slicing. An exception should be caught by reference rather than by value. iocommand.cpp 1620  <\/p>\n<pre><code class=\"cpp\">bool IoCmd::saveLevel(....) {   ....   try {     sl-&gt;save(fp, TFilePath(), overwritePalette);   } catch (TSystemException se) { \/\/ &lt;=     QApplication::restoreOverrideCursor();     MsgBox(WARNING, QString::fromStdWString(se.getMessage()));     return false;   } catch (...) {     ....   }   .... }<\/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\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u043e\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <i>se<\/i> \u0442\u0438\u043f\u0430 <i>TSystemException<\/i>. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u0430 \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u043b\u0430\u0441\u044c \u0432 \u043a\u043b\u0430\u0441\u0441\u0430\u0445, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 <i>TSystemException<\/i>.<\/p>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430:<\/p>\n<ul>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. iocommand.cpp 2650<\/li>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. projectpopup.cpp 522<\/li>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. projectpopup.cpp 537<\/li>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. projectpopup.cpp 635<\/li>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. tlevel_io.cpp 130<\/li>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. calligraph.cpp 161<\/li>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. calligraph.cpp 165<\/li>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. patternmap.cpp 210<\/li>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. patternmap.cpp 214<\/li>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. patternmap.cpp 218<\/li>\n<li>V746 Type slicing. An exception should be caught by reference rather than by value. scriptbinding_level.cpp 221<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/192\/e77\/d3e\/192e77d3e81f8fa796a68618b0d45445.png\" \/><\/div>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0137\/\">V547<\/a> Expression &#8216;(int) startOutPoints.size() % 2 != 2&#8217; is always true. rasterselection.cpp 852  <\/p>\n<pre><code class=\"cpp\">TStroke getIntersectedStroke(TStroke &amp;stroke, TRectD bbox) {   ....   for (t = 0; t &lt; (int)outPoints.size(); t++)     addPointToVector(...., (int)startOutPoints.size() % 2 != 2);   .... }<\/code><\/pre>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0437\u0434\u0435\u0441\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>size()<\/i> \u0447\u0451\u0442\u043d\u044b\u043c \u0438\u043b\u0438 \u043d\u0435\u0447\u0451\u0442\u043d\u044b\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 2 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0443\u043b\u0451\u043c.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0091\/\">V502<\/a> Perhaps the &#8216;?:&#8217; operator works in a different way than it was expected. The &#8216;?:&#8217; operator has a lower priority than the &#8216;+&#8217; operator. igs_motion_wind_pixel.cpp 127  <\/p>\n<pre><code class=\"cpp\">void rgb_to_lightness_(   const double re, const double gr, const double bl, double &amp;li) {   li=((re &lt; gr) ? ((gr &lt; bl) ? bl : gr) : ((re &lt; bl) ? bl : re) +                             (gr &lt; re)                           ? ((bl &lt; gr) ? bl : gr)                           : ((bl &lt; re) ? bl : re)) \/ 2.0; }<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043a\u043e\u0434\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u0442\u0435\u0440\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;:?&#8217;. \u0415\u0433\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0438\u0436\u0435, \u0447\u0435\u043c \u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e, \u0435\u0441\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <i>(re &lt; gr)<\/i> \u043b\u043e\u0436\u043d\u043e, \u0442\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e: \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438.<\/p>\n<p>  \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0440\u043d\u0430\u0440\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u2014 \u044d\u0442\u043e \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0439 \u043f\u0443\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u043a\u043e\u0434.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0194\/\">V590<\/a> Consider inspecting the &#8216;state == (- 3) || state != 0&#8217; expression. The expression is excessive or contains a misprint. psdutils.cpp 174  <\/p>\n<pre><code class=\"cpp\">int psdUnzipWithoutPrediction(....) {   ....   do {     state = inflate(&amp;stream, Z_PARTIAL_FLUSH);     if (state == Z_STREAM_END)       break;     if (state == Z_DATA_ERROR || state != Z_OK) \/\/ &lt;=       break;   } while (stream.avail_out &gt; 0);   .... }<\/code><\/pre>\n<p>  \u0423\u0441\u043b\u043e\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0439, \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043f\u043e\u0434\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u00abstate == Z_DATA_ERROR\u00bb. \u0412 \u044d\u0442\u043e\u043c \u043b\u0435\u0433\u043a\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h2>Copy-paste \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/035\/567\/667\/0355676673fd38bd908f7a6fd4f7eabd.png\" \/><\/div>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0106\/\">V517<\/a> The use of &#8216;if (A) {&#8230;} else if (A) {&#8230;}&#8217; pattern was detected. There is a probability of logical error presence. Check lines: 1448, 1454. tcenterlineskeletonizer.cpp 1448  <\/p>\n<pre><code class=\"cpp\">inline void Event::processVertexEvent() {   ....   if (newLeftNode-&gt;m_concave) {        \/\/ &lt;=     newLeftNode-&gt;m_notOpposites = m_generator-&gt;m_notOpposites;     append&lt;vector&lt;ContourEdge *&gt;, vector&lt;ContourEdge *&gt;::....      newLeftNode-&gt;m_notOpposites.push_back(newRightNode-&gt;m_edge);     newLeftNode-&gt;m_notOpposites.push_back(newRightNode-&gt;....);   } else if (newLeftNode-&gt;m_concave) { \/\/ &lt;=     newRightNode-&gt;m_notOpposites = m_generator-&gt;m_notOpposites;     append&lt;vector&lt;ContourEdge *&gt;, vector&lt;ContourEdge *&gt;::....      newRightNode-&gt;m_notOpposites.push_back(newLeftNode-&gt;m_edge);     newRightNode-&gt;m_notOpposites.push_back(newLeftNode-&gt;....);   }   .... }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <i>newLeftNode<\/i> \u0438 <i>newRightNode<\/i> \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0442\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0435\u0442\u0432\u044c <i>else<\/i> \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u0438\u043c: <i>if (newRightNode-&gt;m_concave)<\/i>.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0090\/\">V501<\/a> There are identical sub-expressions to the left and to the right of the &#8216;||&#8217; operator: m_cutLx || m_cutLx canvassizepopup.cpp 271  <\/p>\n<pre><code class=\"cpp\">bool m_cutLx, m_cutLy;  void PeggingWidget::on00() {  ....  m_11-&gt;setIcon(...).rotate(m_cutLx || m_cutLx ? -90 : 90),....));  .... }<\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0432\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435: <i>m_cutLx<\/i> \u0438 <i>m_cutLy<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043d\u0430 \u043e\u0434\u043d\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0431\u0443\u043a\u0432\u0443. \u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \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>m_cutLx<\/i>. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0090\/\">V501<\/a> There are identical sub-expressions &#8216;parentTask-&gt;m_status == Aborted&#8217; to the left and to the right of the &#8216;||&#8217; operator. tfarmcontroller.cpp 1857  <\/p>\n<pre><code class=\"cpp\">void FarmController::taskSubmissionError(....) {   ....   if (parentTask-&gt;m_status == Aborted || \/\/ &lt;=       parentTask-&gt;m_status == Aborted) { \/\/ &lt;=       parentTask-&gt;m_completionDate = task-&gt;m_completionDate;       if (parentTask-&gt;m_toBeDeleted)         m_tasks.erase(itParent);   }   .... }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0434\u0432\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 <i>Aborted<\/i>. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0444\u0430\u0439\u043b\u0443, \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 2028 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430, \u043d\u043e \u0441 \u0442\u0430\u043a\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c:  <\/p>\n<pre><code class=\"cpp\">if (parentTask-&gt;m_status == Completed ||     parentTask-&gt;m_status == Aborted) {<\/code><\/pre>\n<p>  \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0090\/\">V501<\/a> There are identical sub-expressions &#8216;cornerCoords.y &gt; upperBound&#8217; to the left and to the right of the &#8216;||&#8217; operator. tellipticbrush.cpp 1020  <\/p>\n<pre><code class=\"cpp\">template &lt;typename T&gt; void tellipticbrush::OutlineBuilder::addMiterSideCaps(....) {   ....   if (cornerCoords == TConsts::napd ||     cornerCoords.x &lt; lowerBound || cornerCoords.y &gt; upperBound ||     cornerCoords.y &lt; lowerBound || cornerCoords.y &gt; upperBound) {     ....   }   .... }<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 <i>y<\/i> \u0432\u043c\u0435\u0441\u0442\u043e <i>x<\/i>.<\/p>\n<p>  \u0415\u0449\u0451 \u0448\u0435\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a, \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0432 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 <a href=\"http:\/\/www.viva64.com\/en\/t\/0068\/\">copy-paste \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a>, \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c, \u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u043f\u0438\u0441\u043a\u043e\u043c. \u042d\u0442\u0438 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430\u0434\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c:<\/p>\n<ul>\n<li>V501 There are identical sub-expressions &#8216;s.m_repoStatus == \u00abmodified\u00bb&#8217; to the left and to the right of the &#8216;||&#8217; operator. svnupdatedialog.cpp 210<\/li>\n<li>V501 There are identical sub-expressions &#8216;m_lineEdit-&gt;hasFocus()&#8217; to the left and to the right of the &#8216;||&#8217; operator. framenavigator.cpp 44<\/li>\n<li>V517 The use of &#8216;if (A) {&#8230;} else if (A) {&#8230;}&#8217; pattern was detected. There is a probability of logical error presence. Check lines: 750, 825. tpalette.cpp 750<\/li>\n<li>V517 The use of &#8216;if (A) {&#8230;} else if (A) {&#8230;}&#8217; pattern was detected. There is a probability of logical error presence. Check lines: 123, 126. igs_density.cpp 123<\/li>\n<li>V523 The &#8216;then&#8217; statement is equivalent to the &#8216;else&#8217; statement. typetool.cpp 813<\/li>\n<li>V583 The &#8216;?:&#8217; operator, regardless of its conditional expression, always returns one and the same value: Comma. tgrammar.cpp 731<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0420\u0430\u0437\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/00f\/b6b\/5b3\/00fb6b5b36133749ca16a6f41b7585cb.png\" \/><\/div>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0290\/\">V665<\/a> Possibly, the usage of &#8216;#pragma warning(default: X)&#8217; is incorrect in this context. The &#8216;#pragma warning(push\/pop)&#8217; should be used instead. Check lines: 20, 205. tspectrum.h 205  <\/p>\n<pre><code class=\"cpp\">#ifdef WIN32 #pragma warning(disable : 4251) #endif .... #ifdef WIN32 #pragma warning(default : 4251) #endif<\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 <i>#pragma warning(default: X)<\/i> \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435, \u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u041f\u041e \u0423\u041c\u041e\u041b\u0427\u0410\u041d\u0418\u042e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0442\u0430\u043a\u0438\u043c, \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442.<\/p>\n<p>  \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cpp\">#ifdef WIN32 #pragma warning(push) #pragma warning(disable : 4251) #endif .... #ifdef WIN32 #pragma warning(pop) #endif<\/code><\/pre>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0136\/\">V546<\/a> Member of a class is initialized by itself: &#8216;m_subId(m_subId)&#8217;. tfarmcontroller.cpp 572  <\/p>\n<pre><code class=\"cpp\">class TaskId {   int m_id;   int m_subId;  public:   TaskId(int id, int subId = -1) : m_id(id), m_subId(m_subId){};<\/code><\/pre>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430. \u041f\u043e\u043b\u0435 <i>m_subld<\/i> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0445\u043e\u0442\u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0445\u043e\u0442\u0435\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <i>m_subId(subId)<\/i>.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0148\/\">V557<\/a> Array overrun is possible. The &#8216;9&#8217; index is pointing beyond array bound. tconvolve.cpp 123  <\/p>\n<pre><code class=\"cpp\">template &lt;class PIXOUT&gt; void doConvolve_cm32_row_9_i(....) {   TPixel32 val[9];                                  \/\/ &lt;=   ....   for (int i = 0; i &lt; 9; ++i) {                     \/\/ &lt;= OK     ....     else if (tone == 0)       val[i] = inks[ink];     else       val[i] = blend(....);   }    pixout-&gt;r = (typename PIXOUT::Channel)((     val[1].r * w1 + val[2].r * w2 + val[3].r * w3 +     val[4].r * w4 + val[5].r * w5 + val[6].r * w6 +     val[7].r * w7 + val[8].r * w8 + val[9].r * w9 + \/\/ &lt;= ERR     (1 &lt;&lt; 15)) &gt;&gt; 16);   pixout-&gt;g = (typename PIXOUT::Channel)((     val[1].g * w1 + val[2].g * w2 + val[3].g * w3 +     val[4].g * w4 + val[5].g * w5 + val[6].g * w6 +     val[7].g * w7 + val[8].g * w8 + val[9].g * w9 + \/\/ &lt;= ERR     (1 &lt;&lt; 15)) &gt;&gt; 16);   pixout-&gt;b = (typename PIXOUT::Channel)((     val[1].b * w1 + val[2].b * w2 + val[3].b * w3 +     val[4].b * w4 + val[5].b * w5 + val[6].b * w6 +     val[7].b * w7 + val[8].b * w8 + val[9].b * w9 + \/\/ &lt;= ERR     (1 &lt;&lt; 15)) &gt;&gt; 16);   pixout-&gt;m = (typename PIXOUT::Channel)((     val[1].m * w1 + val[2].m * w2 + val[3].m * w3 +     val[4].m * w4 + val[5].m * w5 + val[6].m * w6 +     val[7].m * w7 + val[8].m * w8 + val[9].m * w9 + \/\/ &lt;= ERR     (1 &lt;&lt; 15)) &gt;&gt; 16);   .... }<\/code><\/pre>\n<p>  \u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0442\u043e-\u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443 <i>val<\/i>, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u0438\u0437 9 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043e\u0442 1 \u0434\u043e 9. \u0425\u043e\u0442\u044f \u0440\u044f\u0434\u043e\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0446\u0438\u043a\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043e\u0442 0 \u0434\u043e 8.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/d\/0147\/\">V556<\/a> The values of different enum types are compared: m_action != EDIT_SEGMENT. Types: Action, CursorType. controlpointeditortool.cpp 257  <\/p>\n<pre><code class=\"cpp\">enum Action { NONE,               RECT_SELECTION,               CP_MOVEMENT,               SEGMENT_MOVEMENT,               IN_SPEED_MOVEMENT,               OUT_SPEED_MOVEMENT };  enum CursorType { NORMAL,                   ADD,                   EDIT_SPEED,                   EDIT_SEGMENT,                   NO_ACTIVE };  void ControlPointEditorTool::drawMovingSegment() {   int beforeIndex = m_moveSegmentLimitation.first;   int nextIndex = m_moveSegmentLimitation.second;   if (m_action != EDIT_SEGMENT || \/\/ &lt;=       beforeIndex == -1 ||       nextIndex == -1 ||       !m_moveControlPointEditorStroke.getStroke())     return;   .... }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 enum \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0438\u043c\u0435\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0438\u043f\u044b. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043a\u043e\u0434\u0443 \u044f \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u043f\u043e\u043b\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 <i>m_action<\/i> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c, \u0430 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8fa\/e43\/f36\/8fae43f363587760980eb15f70ed80c7.png\" \/><\/div>\n<p>  \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b, \u043f\u0440\u043e\u0435\u043a\u0442 OpenToonz \u2014 \u043d\u0430\u0445\u043e\u0434\u043a\u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \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: \u0432 \u043d\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0412 \u0441\u0442\u0430\u0442\u044c\u044e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u043e\u0448\u043b\u0438 \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u0432 \u043d\u0435\u0451 \u043d\u0435 \u0432\u043e\u0448\u043b\u0438 \u0434\u0430\u0436\u0435 \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0438 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0438\u0437-\u0437\u0430 \u0438\u0445 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u044f \u043e\u0442\u043f\u0438\u0448\u0443 \u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043d\u0430 \u0444\u043e\u0440\u0443\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u0434 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 Universal Scene Description (USD) \u0437\u0430\u044f\u0432\u043b\u044f\u043b\u0430 \u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Pixar. \u0421 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0443 \u0436\u0434\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0441\u0435\u043c \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/www.viva64.com\/en\/pvs-studio\/\">PVS-Studio<\/a> \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 C\/C++\/C#. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0441\u0440\u0435\u0434\u0435 Windows \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/en\/b\/0389\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/35e\/064\/ddf\/35e064ddf91f5d99b620384893909ff7.png\" \/><\/div>\n<p><\/a><br \/>  \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\/0389\/\">Toonz code leaves much to be desired<\/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<div class=\"clear\"><\/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\/281138\/\"> https:\/\/habrahabr.ru\/post\/281138\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b3d\/ece\/34c\/b3dece34ceb088220465fe2f1817223a.png\" align=\"left\"\/>\u041d\u0430 \u0434\u043d\u044f\u0445 \u0441\u0442\u0430\u043b\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e Digital Video, \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 TOONZ, \u0438 \u044f\u043f\u043e\u043d\u0441\u043a\u0438\u0439 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044c DWANGO \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043b\u0438 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 DWANGO \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Toonz, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f 2D \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. <\/p>\n<p>  \u041f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c\u0438, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442 \u043e\u0431\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a OpenToonz, \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Toonz. \u041e\u043d \u0442\u0430\u043a \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 Studio Ghibli, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0421 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Studio Ghibli \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u00ab\u0425\u043e\u0434\u044f\u0447\u0438\u0439 \u0437\u0430\u043c\u043e\u043a \u0425\u043e\u0443\u043b\u0430\u00bb, \u00ab\u0423\u043d\u0435\u0441\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0437\u0440\u0430\u043a\u0430\u043c\u0438\u00bb, \u00ab\u0420\u044b\u0431\u043a\u0443 \u041f\u043e\u043d\u044c\u043e\u00bb, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0430\u0440\u0442\u0438\u043d. \u0412 \u0438\u0445 \u0447\u0438\u0441\u043b\u0435 \u0442\u0430\u043a \u0436\u0435 \u043c\u0443\u043b\u044c\u0442\u0444\u0438\u043b\u044c\u043c \u00ab\u0424\u0443\u0442\u0443\u0440\u0430\u043c\u0430\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u043b \u043c\u0435\u043d\u044f \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0440\u0430\u0437\u043e\u0431\u043b\u0430\u0447\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 OpenToonz.  <\/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-277827","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/277827","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=277827"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/277827\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=277827"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=277827"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=277827"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}