{"id":300782,"date":"2020-03-26T15:00:24","date_gmt":"2020-03-26T15:00:24","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=300782"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2020-03-26T15:00:24","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=300782","title":{"rendered":"OpenToonz: \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0438 \u0432\u043d\u0443\u0442\u0440\u0438"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/494220\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/dea\/ccf\/6dd\/deaccf6dded129be42e3f458e2457c48.png\" alt=\"image1.png\"><\/div>\n<p>  \u041f\u0440\u043e\u0448\u043b\u043e \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0433\u043e\u0434\u0430 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u0430\u043a PVS-Studio \u043f\u043e\u0432\u0435\u0440\u044f\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 OpenToonz. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u0417\u0430 \u0432\u0440\u0435\u043c\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u041c\u044d\u0440\u0438 \u0438 \u0412\u0435\u0434\u044c\u043c\u0438\u043d \u0446\u0432\u0435\u0442\u043e\u043a, \u0411\u044d\u0442\u043c\u044d\u043d-\u041d\u0438\u043d\u0437\u044f, \u041f\u0440\u043e\u043c\u0430\u0440\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u0420\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u0442\u0443\u0434\u0438\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f Toonz, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0435\u0449\u0435 \u0440\u0430\u0437?<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0421 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u043e\u0448\u0438\u0431\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 &quot;<a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/281138\/\">\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<\/a>&quot;. \u0412 \u0446\u0435\u043b\u043e\u043c \u043d\u0435 \u043f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u043b\u043e\u0441\u044c, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0431\u0449\u0435\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0441\u0442\u0430\u043b\u043e. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0445 \u0436\u0435 \u043e\u0448\u0438\u0431\u043e\u043a, \u0447\u0442\u043e \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043c\u044b \u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0431\u043b\u0430\u0433\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0435\u0441\u0442\u044c \u0438\u0437 \u0447\u0435\u0433\u043e.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0436\u0438\u0432\u0443\u0442 \u0432 \u0440\u0435\u0434\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0438\u043b\u0438 \u0432\u043e\u0432\u0441\u0435 \u0432 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u0430\u0445 \u043a\u043e\u0434\u0430, \u0438\u043d\u0430\u0447\u0435 \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0431\u044b \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b. \u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u0435\u043d. \u041f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u044b\u0441\u043b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043d\u0435 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0441\u0442\u0430\u0440\u044b\u0445 \u0438 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0430 \u0432 \u0443\u0434\u0435\u0448\u0435\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041c\u043d\u043e\u0433\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u044b \u0441\u0440\u0430\u0437\u0443, \u0430 \u043d\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u041f\u041e. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u043e\u0448\u0438\u0431\u043a\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0440\u0430\u043d\u043d\u0435\u043c \u044d\u0442\u0430\u043f\u0435. \u042d\u0442\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0438 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0438 \u0434\u0435\u043d\u044c\u0433\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438. \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u0447\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e \u043e\u0434\u043d\u043e, \u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N1<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v610\/\">V610<\/a> Undefined behavior. Check the shift operator &#8216;&lt;&lt;&#8216;. The left operand &#8216;(- 1)&#8217; is negative.<\/p>\n<pre><code class=\"cpp\">decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) {   int p1, m1;   p1 = 1 &lt;&lt; cinfo-&gt;Al;       m1 = (-1) &lt;&lt; cinfo-&gt;Al;    .... }<\/code><\/pre>\n<p>  \u041d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u044f\u0441\u043d\u043e, \u0447\u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 \u0445\u043e\u0442\u0435\u043b \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0437\u0434\u0435\u0441\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0434\u0432\u0438\u0433\u0430 \u0441 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \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. \u0422\u043e, \u043a\u0430\u043a \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0434\u0432\u0438\u0433\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u043c, \u043d\u043e \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0441\u0432\u0435\u0440\u0438\u043c\u0441\u044f \u0441 \u043d\u0438\u043c:<\/p>\n<p>  1. The type of the result is that of the promoted left operand. The behavior is undefined if the right operand is negative, or greater than or equal to the length in bits of the promoted left operand.<\/p>\n<p>  2. The value of E1 &lt;&lt; E2 is E1 left-shifted E2 bit positions; vacated bits are zero-filled. If E1 has an unsigned type, the value of the result is E1 * 2^E2, reduced modulo one more than the maximum value representable in the result type. Otherwise, if E1 has a signed type and non-negative value, and E1*2^E2 is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u0430\u0432\u044b\u0439 \u0438\u043b\u0438 \u043b\u0435\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f, \u043d\u0435\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f, \u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N2<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v517\/\">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: 156, 160. cameracapturelevelcontrol.cpp 156<\/p>\n<pre><code class=\"cpp\">void CameraCaptureLevelHistogram::mousePressEvent(QMouseEvent* event) {   if (event-&gt;button() != Qt::LeftButton) return;   if (m_currentItem == Histogram) {     m_histogramCue = true;     return;   }   if (m_currentItem == None) return;   QPoint pos = event-&gt;pos();   if (m_currentItem == BlackSlider)  \/\/ &lt;=     m_offset = pos.x() - SIDE_MARGIN - m_black;   else if (m_currentItem == GammaSlider)     m_offset = pos.x() - SIDE_MARGIN - gammaToHPos(m_gamma, m_black, m_white);   else if (m_currentItem == BlackSlider)  \/\/ &lt;=     m_offset = pos.x() - SIDE_MARGIN - m_white;   else if (m_currentItem == ThresholdSlider)     m_offset = pos.x() - SIDE_MARGIN - m_threshold; } <\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>m_offset<\/i> \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <i>m_currentItem<\/i>. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 <i>BlackSlider<\/i> \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e, \u0438 \u0438\u0437 \u0442\u0435\u043b\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>m_white<\/i>. \u0417\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f <i>m_currentItem<\/i>. <\/p>\n<pre><code class=\"cpp\">  LevelControlItem m_currentItem;    enum LevelControlItem {     None = 0,     BlackSlider,     WhiteSlider,     GammaSlider,     ThresholdSlider,     Histogram,     NumItems   };<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/664\/caa\/09b\/664caa09b6eca7a582ae4441c232e61e.png\" alt=\"image3.png\"><\/div>\n<p>  \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <i>WhiteSlider<\/i>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u043b \u043f\u043e\u0442\u0435\u0440\u044f\u043d \u0438\u0437-\u0437\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u044b.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N3<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v517\/\">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: 784, 867. tpalette.cpp 784<\/p>\n<pre><code class=\"cpp\">void TPalette::loadData(TIStream &amp;is) {   ....   std::string tagName;   while (is.openChild(tagName)) {     if (tagName == &quot;version&quot;) {       ....     } else if (tagName == &quot;stylepages&quot;) { \/\/ &lt;=       while (!is.eos()) {         if (....){           ....         }         ....         is.closeChild();         }     } else if (tagName == &quot;refImgPath&quot;) {       ....     } else if (tagName == &quot;animation&quot;) {       ....     } else if (tagName == &quot;stylepages&quot;) { \/\/ &lt;=       int key = &#39;0&#39;;       while (!is.eos()) {         int styleId = 0;         ....       }     }        ....   } }<\/code><\/pre>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0436\u0435 \u0443 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u043b\u0430, \u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <i>tagName<\/i> \u0443\u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u044b\u043b \u0443\u043f\u0443\u0449\u0435\u043d, \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N4<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v547\/\">V547<\/a> Expression &#8216;chancount == 2&#8217; is always true. psd.cpp 720<\/p>\n<pre><code class=\"cpp\">void TPSDReader::readImageData(...., int chancount) {   ....   if (depth == 1 &amp;&amp; chancount == 1) { \/\/ &lt;= 1     ....   } else if (depth == 8 &amp;&amp; chancount &gt; 1) {     ....     for (....) {       if (chancount &gt;= 3) {         ....         if (chancount == 4)             ....         else           ....       } else if (chancount &lt;= 2)  \/\/ &lt;= 2       {         ....         if (chancount == 2) \/\/ &lt;= 3           ....         else           ....       }       ....     }     ....   } else if (m_headerInfo.depth == 8 &amp;&amp; chancount == 1) {   .... }<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u043a\u0440\u0430\u043b\u0430\u0441\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0412 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043f\u043e\u0434 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043e\u0434\u0438\u043d <i>chancount<\/i> \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 1, \u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043d\u043e\u043c\u0435\u0440 2 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u0430 2. \u0412 \u0438\u0442\u043e\u0433\u0435, \u043a \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u043f\u043e\u0434 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0442\u0440\u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <i>chancount<\/i> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 2. \u041a \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0442\u0430\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442, \u043d\u043e \u043e\u043d\u0430 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0437\u0430\u0447\u0435\u043c \u0442\u043e\u0433\u0434\u0430 else-\u0432\u0435\u0442\u043a\u0430\u2026<\/p>\n<p>  \u0412 \u0446\u0435\u043b\u043e\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0432 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 300 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u0442 \u043d\u0430\u0433\u0440\u043e\u043c\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0438 \u0446\u0438\u043a\u043b\u043e\u0432.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/725\/c28\/39a\/725c2839a5774ec76b0143ec64531fda.png\" alt=\"image4.png\"><\/div>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N5<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v614\/\">V614<\/a> Uninitialized variable &#8216;precSegmentIndex&#8217; used. Consider checking the fifth actual argument of the &#8216;insertBoxCorners&#8217; function. rasterselection.cpp 803<\/p>\n<pre><code class=\"cpp\">TStroke getIntersectedStroke(TStroke &amp;stroke, TRectD bbox) {   ....   int precSegmentIndex, currentSegmentIndex, startSegmentIndex,       precChunkIndex = -1;   ....   if (....) {     insertBoxCorners(bbox, points, outPoints, currentSegmentIndex,                      precSegmentIndex);     ....   } }  void insertBoxCorners(...., int currentSegmentIndex, int precSegmentIndex) {   ....   bool sameIndex = (precSegmentIndex == currentSegmentIndex);   ....   int segmentIndex = precSegmentIndex;   .... }<\/code><\/pre>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0437\u0434\u0435\u0441\u044c \u043e\u0448\u0438\u0431\u043a\u0430 \u0431\u044b\u043b\u0430 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u0435\u0449\u0435 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <i>precSegmentIndex<\/i>, <i>currentSegmentIndex<\/i>, <i>startSegmentIndex<\/i>, <i>precChunkIndex<\/i>. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0433 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 -1 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u043c \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0435.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N6<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v590\/\">V590<\/a> Consider inspecting the &#8216;s != &quot;&quot; &amp;&amp; s == \u00abcolor\u00bb&#8217; expression. The expression is excessive or contains a misprint. cleanupparameters.cpp 416<\/p>\n<pre><code class=\"cpp\">void CleanupParameters::loadData(TIStream &amp;is, bool globalParams) {   ....   std::string s = is.getTagAttribute(&quot;sharpness&quot;);   ....   if (....)   {     ....   } else if (tagName == &quot;lineProcessing&quot;)     ....     if (s != &quot;&quot; &amp;&amp; isDouble(s))        ....     if (s != &quot;&quot; &amp;&amp; isDouble(s))       ....     if (s != &quot;&quot; &amp;&amp; s == &quot;color&quot;) \/\/ &lt;=       ....   } else if (tagName == &quot;despeckling&quot;) {     ....     }   .... }<\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430, \u0434\u0430\u0436\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u043d\u0435\u0434\u043e\u0447\u0435\u0442, \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043b\u0438\u0448\u044c \u043a \u043b\u0438\u0448\u043d\u0435\u043c\u0443 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434 \u0432 \u0446\u0435\u043b\u043e\u043c, \u0441\u0442\u0430\u043d\u0435\u0442 \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043b\u0438\u0448\u043d\u0435\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u044b \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/bcc\/077\/857\/bcc077857a8341d45e6fcf504129353c.png\" alt=\"image5.png\"><\/div>\n<p>  \u0422\u0430\u043a\u0430\u044f \u043b\u0430\u043f\u0448\u0430, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430, \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u0435\u0449\u0435 \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u043b\u043e\u0433\u0438\u043a\u0438, \u0438 \u0438\u0445 \u043f\u043e\u0438\u0441\u043a \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043c\u0443\u0447\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N7<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v772\/\">V772<\/a> Calling a &#8216;delete&#8217; operator for a void pointer will cause undefined behavior. pluginhost.cpp 1327<\/p>\n<pre><code class=\"cpp\">static void release_interface(void *interf) {   if (interf) delete interf; }<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0441\u0430\u043c\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0435\u0435: \u0432\u044b\u0437\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>delete<\/i> \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0442\u0438\u043f <i>void<\/i> \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. \u0415\u0441\u043b\u0438 \u0431\u044b\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0435\u0451 \u0441\u0442\u043e\u0438\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0439.<\/p>\n<pre><code class=\"cpp\">template&lt;class T&gt; static void release_interface(T *interf) {   if (interf) delete interf; }<\/code><\/pre>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N8<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v568\/\">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;m_xshHandle&#8217; class object. tstageobjectcmd.cpp 455<\/p>\n<pre><code class=\"cpp\">class DVAPI TStageObjectParams {   .... };  class RemovePegbarNodeUndo final : public TUndo {   ....   TXsheetHandle *m_xshHandle;  public:   int getSize() const override {     return sizeof *this + sizeof(TStageObjectParams) + sizeof(m_xshHandle);   }   .... }<\/code><\/pre>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/examples\/v568\/\">\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e<\/a> \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u043a\u0430\u043a \u043f\u043e \u043d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0438 \u043f\u043e \u043d\u0435\u0437\u043d\u0430\u043d\u0438\u044e. \u0422\u0443\u0442, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u043e \u0432 \u043d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u043c <i>this<\/i> \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0431\u044b\u043b \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c. \u0418\u043d\u0430\u0447\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0430\u043c\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f.<\/p>\n<pre><code class=\"cpp\">return sizeof *this + sizeof(TStageObjectParams) + sizeof(*m_xshHandle);<\/code><\/pre>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N9<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v568\/\">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. shaderfx.cpp 107<\/p>\n<pre><code class=\"cpp\">struct RectF {   GLfloat m_val[4];   ....   bool operator==(const RectF &amp;rect) const {     return (memcmp(m_val, rect.m_val, sizeof(this)) == 0);   } };<\/code><\/pre>\n<p>  \u0410 \u0442\u0443\u0442, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0437\u0430\u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <i>this<\/i>. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \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. \u041a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 4 \u0438\u043b\u0438 8 \u0431\u0430\u0439\u0442 (\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438). \u0412\u0435\u0440\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">return (memcmp(m_val, rect.m_val, sizeof(*this)) == 0);<\/code><\/pre>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N10<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v554\/\">V554<\/a> Incorrect use of unique_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(TFilePath scrFn, TFilePath swfFn,                      std::string screenSaverName) {   struct _stat results; ....   int swfSize = results.st_size;   std::unique_ptr&lt;char&gt; swf(new char[swfSize]); .... }<\/code><\/pre>\n<p>  \u0427\u0430\u0441\u0442\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u043e\u0442 \u0442\u0438\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f unique_ptr, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f delete \u0438\u043b\u0438 delete[]. \u0412 \u0438\u0442\u043e\u0433\u0435, \u0435\u0441\u043b\u0438 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043a\u0430\u043a \u0432 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 new[], \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 delete. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0442\u0438\u043f\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438: std::unique_ptr&lt;char[]&gt;.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N11<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v521\/\">V521<\/a> Such expressions using the &#8216;,&#8217; operator are dangerous. Make sure the expression &#8216;m_to, m_from = it-&gt;first.getNumber()&#8217; is correct. flipbook.cpp 509<\/p>\n<pre><code class=\"cpp\">class LoadImagesPopup final : public FileBrowserPopup {   ....   int m_from, m_to, ....;   .... } void LoadImagesPopup::onFilePathClicked(....) {   TLevel::Iterator it;   ....   it = level-&gt;begin();   m_to, m_from = it-&gt;first.getNumber();  \/\/ &lt;=   for (; it != level-&gt;end(); ++it) m_to = it-&gt;first.getNumber();    if (m_from == -2 &amp;&amp; m_to == -2) m_from = m_to = 1;    m_minFrame = m_from;   m_maxFrame = m_to;   .... }<\/code><\/pre>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043e\u0436\u0438\u0434\u0430\u043b, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u0438\u0441\u0430\u0432 \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &quot;,&quot; \u0432 \u0421++ \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0412 \u043d\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u00ab\u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00bb, \u0434\u0430\u043b\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u043d\u0434. \u0418, \u0445\u043e\u0442\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <i>m_to<\/i> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0446\u0438\u043a\u043b\u0435, \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0439\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0438\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u0442 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e <i>m_to<\/i> \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0418 \u0432\u043e\u043e\u0431\u0449\u0435, \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0442\u0440\u0430\u043d\u043d\u043e.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N12<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v532\/\">V532<\/a> Consider inspecting the statement of &#8216;*pointer++&#8217; pattern. Probably meant: &#8216;(*pointer)++&#8217;. trop.cpp 140<\/p>\n<pre><code class=\"cpp\">template &lt;class T, class Q&gt; void doGammaCorrect(TRasterPT&lt;T&gt; raster, double gamma) {   Gamma_Lut&lt;Q&gt; lut(....);    int j;   for (j = 0; j &lt; raster-&gt;getLy(); j++) {     T *pix    = raster-&gt;pixels(j);     T *endPix = pix + raster-&gt;getLx();     while (pix &lt; endPix) {       pix-&gt;r = lut.m_table[pix-&gt;r];       pix-&gt;b = lut.m_table[pix-&gt;b];       pix-&gt;g = lut.m_table[pix-&gt;g];       *pix++; \/\/ &lt;=     }   } }<\/code><\/pre>\n<p>  \u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043d\u0435\u0434\u043e\u0447\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0443\u0442\u0430\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0447\u0438\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434. \u0418\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442, \u043a\u0430\u043a \u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u043e\u0441\u044c, \u0441\u043c\u0435\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435. \u041b\u0443\u0447\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <i>pix++<\/i>.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N13<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v773\/\">V773<\/a> The function was exited without releasing the &#8216;autoCloseUndo&#8217; pointer. A memory leak is possible. vectortapetool.cpp 575<\/p>\n<pre><code class=\"cpp\">void joinLineToLine(....) {   ....   UndoAutoclose *autoCloseUndo = 0;   ....   autoCloseUndo = new UndoAutoclose(....);   ....   if (pos &lt; 0) return;   ....   TUndoManager::manager()-&gt;add(autoCloseUndo); }<\/code><\/pre>\n<p>  \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 20. \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0433\u0434\u0435-\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 <i>return<\/i> \u044d\u0442\u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0448\u0430\u0433 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d. \u0422\u0430\u043a \u0438 \u0437\u0434\u0435\u0441\u044c. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f <i>TUndoManager::manager()-&gt;add()<\/i>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 <i>return<\/i> \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0437\u0430\u0431\u044b\u043b\u0438 \u043f\u043e\u0437\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u0441\u0432\u043e\u0438\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u0445 \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043a\u0443\u0434\u0430-\u0442\u043e \u0432 \u043a\u043e\u043d\u0435\u0446 \u0431\u043b\u043e\u043a\u0430 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c <i>return<\/i>.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u0434\u0430, \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439, \u0442\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e. \u0422\u0443\u0442 \u0438 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0443\u0441\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N14<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v522\/\">V522<\/a> Dereferencing of the null pointer &#8216;region&#8217; might take place. palettecmd.cpp 94<\/p>\n<pre><code class=\"cpp\">bool isStyleUsed(const TVectorImageP vi, int styleId) {   ....   int regionCount = vi-&gt;getRegionCount();   for (i = 0; i &lt; regionCount; i++) {     TRegion *region = vi-&gt;getRegion(i);     if (region || region-&gt;getStyle() != styleId) return true;   }   .... }<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u0430 short-circuit evaluation \u0438 \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432\u0435\u0440\u043d\u0435\u0442 <i>false<\/i>, \u0442\u043e \u0434\u0430\u043b\u0435\u0435 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &quot;||&quot; \u0432\u0441\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.<\/p>\n<p>  <b>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 N15<\/b><\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v561\/\">V561<\/a> It&#8217;s probably better to assign value to &#8216;ca&#8217; variable than to declare it anew. Previous declaration: xshcellmover.cpp, line 319. xshcellmover.cpp 323<\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v561\/\">V561<\/a> It&#8217;s probably better to assign value to &#8216;cb&#8217; variable than to declare it anew. Previous declaration: xshcellmover.cpp, line 320. xshcellmover.cpp 324xshcellmover.cpp 323<\/p>\n<pre><code class=\"cpp\">void redo() const override {   int ca       = m_cellsMover.getStartPos().x;   int cb       = m_cellsMover.getPos().x;   ....   if (!m_cellsMover.getOrientation()-&gt;isVerticalTimeline()) {     int ca = m_cellsMover.getStartPos().y;     int cb = m_cellsMover.getPos().y;   }   ....   if (ca != cb) {     ....   }   .... }<\/code><\/pre>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0430, \u043d\u043e \u0441 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0441\u0443\u0442\u044c\u044e \u043e\u0448\u0438\u0431\u043a\u0438. \u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a <i>x<\/i> \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u043e \u043d\u0430 <i>y<\/i>, \u043d\u043e \u0432\u043e\u0442 \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f, \u0443\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0431\u044b\u043b\u0438. \u0412 \u0438\u0442\u043e\u0433\u0435, \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043c\u0435\u043d\u044b \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0434\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 <i>ca<\/i> \u0438 <i>cb<\/i>, \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 <i>ca<\/i> \u0438 <i>cb<\/i>, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0434\u0430\u043b\u0435\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0410 \u0432\u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 <i>ca<\/i> \u0438 <i>cb<\/i> \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u0441\u0432\u043e\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u043b\u044f <i>x<\/i>. <\/p>\n<p>  <b>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 N1<\/b><\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0442\u044b\u043a\u0430\u0442\u044c \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435. \u041c\u043e\u0436\u0435\u0442 \u043c\u043d\u0435 \u043f\u043e\u0432\u0435\u0437\u043b\u043e, \u043d\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u043e \u0441\u0435\u0431\u044f \u0436\u0434\u0430\u0442\u044c: \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u0435, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0438\u0445 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u0441 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u0432\u0438\u0441\u0430\u043d\u0438\u044f \u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f <i>Ctrl+Z<\/i>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0432\u044b\u0448\u043b\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/35d\/a67\/350\/35da67350bc54eb9cbada817d91a04c8.png\" alt=\"image6.png\"><\/div>\n<p>  \u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u0438\u0432\u0438\u0442\u0438\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c <i>Ctrl+S<\/i>, OpenToonz \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0438\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u043c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c. \u0412\u0441\u0435-\u0442\u0430\u043a\u0438 \u043d\u0435 \u0437\u0440\u044f \u0438\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u0443\u0434\u0438\u0438.<\/p>\n<p>  \u0418 \u043c\u043e\u0435 \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u043a \u0431\u043e\u043d\u0443\u0441:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e88\/a95\/8e3\/e88a958e3dd8c85b3894de88f140b7e0.gif\" alt=\"image7.gif\"><\/div>\n<p>  <b>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 N2<\/b><\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 OpenToonz \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0442\u0430\u043d\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0441\u0442\u043e\u043f\u043e\u0440\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0414\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u00ab\u041c\u0430\u0441\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u00bb, \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u0433 \u0437\u0430\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0432 suppress-\u0431\u0430\u0437\u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0436\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0432\u0435\u0436\u0438\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439. \u041d\u0443 \u0430 \u0435\u0441\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u043e\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u0433.<\/p>\n<p>  P.S. \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/www.viva64.com\/ru\/b\/0614\/\">\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PVS-Studio<\/a>.<\/p>\n<p>  <a href=\"https:\/\/www.viva64.com\/en\/b\/0720\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c78\/30f\/70c\/c7830f70c5577c3d6704f254d7cad6a3.png\" align=\"left\"><\/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: Victoria Khanieva. <a href=\"https:\/\/www.viva64.com\/en\/b\/0720\/\">OpenToonz<\/a>.<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/494220\/\"> https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/494220\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/494220\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/dea\/ccf\/6dd\/deaccf6dded129be42e3f458e2457c48.png\" alt=\"image1.png\"><\/div>\n<p>  \u041f\u0440\u043e\u0448\u043b\u043e \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0433\u043e\u0434\u0430 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u0430\u043a PVS-Studio \u043f\u043e\u0432\u0435\u0440\u044f\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 OpenToonz. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u0417\u0430 \u0432\u0440\u0435\u043c\u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u041c\u044d\u0440\u0438 \u0438 \u0412\u0435\u0434\u044c\u043c\u0438\u043d \u0446\u0432\u0435\u0442\u043e\u043a, \u0411\u044d\u0442\u043c\u044d\u043d-\u041d\u0438\u043d\u0437\u044f, \u041f\u0440\u043e\u043c\u0430\u0440\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435. \u0420\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0441\u0442\u0443\u0434\u0438\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f Toonz, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0435\u0449\u0435 \u0440\u0430\u0437?  <\/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-300782","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/300782","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=300782"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/300782\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=300782"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=300782"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=300782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}