
ååã®èšäºã§ãéçã³ãŒãã¢ãã©ã€ã¶ãŒãåæãã¹ãã䜿çšããŠè©äŸ¡ãããã¢ãããŒããæ°ã«å ¥ããªããšæžããŸããã ãã®èšäºã§ã¯ãèŠåãæèçã«çºè¡ãããªãç¹å¥ãªã±ãŒã¹ãšããŠã¢ãã©ã€ã¶ãŒã«ãã£ãŠèªèãããäŸãåŒçšããŸããã æ£çŽã«èšããšããã®ãããã¯ã«é¢ããã³ã¡ã³ããæ¥å¢ããããšã¯ã»ãšãã©ãããŸããã§ããããã¢ãã©ã€ã¶ãŒã«å®è£ ãããŠãã誀ã£ãã¢ã©ãŒã ã«ãããªãã¡ã«ããºã ãåå ã§ãšã©ãŒã«é¢ããèŠåãåºãããšã¯ãããŸããã§ããã 誀æ€ç¥ãšã®éãã¯éçã¢ãã©ã€ã¶ãŒã®éåžžã«å€§ããªã³ã³ããŒãã³ãã§ãããããããã§äœãè°è«ããã®ãããæ確ã§ã¯ãããŸããã ãããè¡ãå¿ èŠããããããã ãã§ãã ãã®ãããªã¡ã«ããºã ã¯ãã¢ãã©ã€ã¶ãŒã ãã§ãªããä»ã®ã¢ãã©ã€ã¶ãŒ/ã³ã³ãã€ã©ã«ãååšããŸãã ããã«ããããããããã®ç¬éã¯ãã®ãããªæ¿ããè°è«ãåŒãèµ·ãããã®ã§ãããã«æ³šæãæã䟡å€ããããšæãã®ã§ããã®èª¬æèšäºãæžããŸããã
ã¯ããã«
ããã¯ãã¹ãŠãã ãªãåæãã¹ãã奜ãã§ã¯ãªãã®ã ã ãšããåºçç©ããå§ãŸããŸããã ãã®èšäºã¯æ§ããã«æžããããšèšããã§ãããã ãã£ã¹ã«ãã·ã§ã³ã§ã¯ãç¹å®ã®æš¡æ¬ãã¹ãã奜ãã§ã¯ãªãçç±ã説æããå¿ èŠãããå ŽåããããŸãã æ¯åé·ãçããæžãã®ã¯é£ããã®ã§ãç§ã¯é·ãéãèšäºãžã®åçãæºåããããšãèšç»ããŠããŸããã itc-benchmarksãèŠããšããããã¹ããæžãè¯ãææã§ããããšã«æ°ä»ããŸãããç§ã®å°è±¡ã¯æ°é®®ã§ãèšäºã«å«ããããšãã§ããããã€ãã®ãã¹ããéžæã§ããŸãã
ç§ã¯ããã°ã©ããŒã®ã³ãã¥ããã£ã«ãããã®èšäºã®ãã®ãããªæåŠããããŸããŸãªãµã€ããã¡ãŒã«ã§ã®ã³ã¡ã³ããæåŸ ããŠããŸããã§ããã ãã®çç±ã¯ããããããç§ãéçã¢ãã©ã€ã¶ãŒã10幎ééçºããŠãããããã€ãã®è³ªåãéåžžã«æçœã«æãããããããããããŸãã«ãç°¡æœãã€ã«ããŽãªãŒçã«èããããã§ãã 誀解ãæé€ããåœéœæ§ãšã®éããè¡ãããŠããæ¹æ³ãšçç±ã説æããŸãã
èšäºã®ããã¹ãã¯ä»»æã®ããŒã«ãåç §ã§ããŸãããPVS-Studioã¯ãããšã¯äœã®é¢ä¿ããããŸããã åæ§ã®èšäºã¯ãGCCãCoverityããŸãã¯Cppcheckã®éçºè ã®1人ãäœæã§ããŸãã
誀æ€ç¥ã䌎ãæåæäœ
ã¡ã€ã³ãããã¯ã«çæããåã«ã誀ã£ãã¡ãã»ãŒãžã®ããŒã¯ã¢ãããæ確ã«ããããšæããŸãã äœãèµ·ãã£ãŠããã®ãç解ãããå€ãã®äººãåŠå®çãªã³ã¡ã³ããæžãå§ãããšããå°è±¡ãåããŸããã ç§ã¯æ¬¡ã®ç²Ÿç¥ã§ã³ã¡ã³ãã«äŒããŸããïŒ
ããªãã¯ééã£ãæ¹æ³ã§è¡ã£ãã 誀æ€ç¥ãæå¶ããã¡ã«ããºã ãæäŸãã代ããã«ã誀æ€ç¥ãã§ããéãæé€ããããšãããããå€ãã®å Žå誀解ãããŸãã
ãã®ãããã¯ã®è°è«ã«æ»ããªãããã«èª¬æãããŸãã PVS-Studioã¯ãã©ã®ãããªå Žåã§ãé¿ããããªã誀æ€ç¥ãæé€ããããã®ããã€ãã®ã¡ã«ããºã ãæäŸããŸãã
- ã³ã¡ã³ãã䜿çšããŠç¹å®ã®è¡ã®èŠåãæå¶ããŸãã
- ãã¯ãã«èµ·å ããèŠåã®å€§éæå¶ã ãããç¹å¥ãªã³ã¡ã³ããéããŠè¡ãããŸãã
- åæ§ã«ãç¹å®ã®æåã·ãŒã±ã³ã¹ãå«ãã³ãŒãè¡ã®å Žåã
- èšå®ãŸãã¯ç¹å¥ãªã³ã¡ã³ãã䜿çšããŠããã®ãããžã§ã¯ãã®ç¡é¢ä¿ãªèšºæãå®å šã«ç¡å¹ã«ããŸãã
- #ifndef PVS_STUDIOã䜿çšããã³ãŒãã®äžéšã®åæã®äŸå€ã
- ç¹å¥ãªçš®é¡ã®ã³ã¡ã³ãã䜿çšããŠãäžéšã®èšºæã®èšå®ãå€æŽããŸãã ãããã¯ãç¹å®ã®èšºæã®èª¬æã§èª¬æãããŠããŸãïŒäŸãšããŠã V719 ïŒV719_COUNT_NAMEãåç §ïŒã
ãããã®æ©èœã¯ãã¹ãŠãã 誀èŠåã®æå¶ ãããã¥ã¡ã³ãã»ã¯ã·ã§ã³ã§è©³çŽ°ã«èª¬æãããŠããŸãã èšå®ãã¡ã€ã«ã䜿çšããŠãèŠåããªãã«ãããããã¯ãå ã®èŠåãæå¶ãããããããšãã§ããŸãïŒpvsconfigãåç §ïŒã
ãããšã¯å¥ã«ãç¹å¥ãªããŒã¿ããŒã¹ã䜿çšããŠã¢ã©ãŒãã®å€§éããŒãã³ã°ã®ã·ã¹ãã ã匷調ããå¿ èŠããããŸãã ããã«ããã倧èŠæš¡ãããžã§ã¯ãã®éçºããã»ã¹ã«ã¢ãã©ã€ã¶ãŒãè¿ éã«çµ±åã§ããŸãã ãã®ããã»ã¹ã®ã€ããªãã®ãŒã«ã€ããŠã¯ãèšäºã PVS-Studioã¢ãã©ã€ã¶ãŒã®äœ¿çšæ¹æ³ ãã§èª¬æããŠããŸãã
ããã¯ãã¹ãŠããšã©ãŒãšèŠãªãã¹ãã§ãªããã®ã®æ瀺çãªæ瀺ãæããŸãã ãã ããç¹å¥ãªäŸå€ã䜿çšããŠèŠåãæå°åãããšããã¿ã¹ã¯ã¯åé€ãããŸããã ã¢ãã©ã€ã¶ãŒã®äŸ¡å€ã¯ããã¹ãŠãèªãããšã§ã¯ãªããèªãå¿ èŠããªãç¶æ³ãã©ãã ãç¥ã£ãŠããããšããããšã§ãã
çè«çèæ¯
ä»å°ãçè«ã åã¢ãã©ã€ã¶ãŒã®èšºæã¡ãã»ãŒãžã¯ã次ã®2ã€ã®ç¹æ§ã«ãã£ãŠè©äŸ¡ãããŸãã
- ãšã©ãŒã®é倧床ïŒããã°ã©ã ã«ãšã£ãŠèŽåœçã§ãïŒã
- ãšã©ãŒã®ä¿¡é Œæ§ïŒã¢ãã©ã€ã¶ãŒãç解ã§ããªãã³ãŒãã ãã§ãªããå®éã®æ¬ é¥ãæ€åºããã確çïŒã
å蚺æã®ããã2ã€ã®åºæºã¯ãä»»æã®å²åã§çµã¿åãããããšãã§ããŸãã ãããã£ãŠã蚺æã®çš®é¡ã説æãããããã2次å ã°ã©ãã«é 眮ããããšãçæ³çã§ãã

å³1.蚺æã¯ãéèŠåºŠãšä¿¡é Œæ§ã«ãã£ãŠè©äŸ¡ã§ããŸãã
ããã€ãã®å®äŸã瀺ããŸãã * .cppãã¡ã€ã«ã«ã³ã¡ã³ãã®èŠåºãããªããšå€æãã蚺æA㯠ãå³äžé ã«é 眮ãããŸãã ã³ã¡ã³ããå¿ããŠããããã°ã©ã ã§ã¯ã©ãã·ã¥ããããšã¯ãããŸããããã³ãã³ãã§åãå ¥ãããããšã³ã³ãŒãã£ã³ã°æšæºã®èŠ³ç¹ããã¯ãšã©ãŒã§ãã ãã®å Žåãã³ã¡ã³ãããããã©ãããéåžžã«æ£ç¢ºã«å€æã§ããŸãã ãããã£ãŠããšã©ãŒã®ä¿¡é Œæ§ã¯é«ããªããŸãã
ã¯ã©ã¹ã®ã¡ã³ããŒã®äžéšãã³ã³ã¹ãã©ã¯ã¿ãŒã§åæåãããŠããªãããšã瀺ã蚺æBã¯ãäžéšã®äžå€®ã«é 眮ãããŸãã ãã®ãšã©ãŒã®ä¿¡é Œæ§ã¯ããŸãé«ããããŸãããã¢ãã©ã€ã¶ãŒã¯ããã®ã¡ã³ããŒãåæåãããæ¹æ³ãšå Žæãç解ã§ããªãã£ãããã§ãïŒ ããã¯å°é£ã§ã ïŒã ããã°ã©ããŒã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã®å®äºåŸã«åæåãå®è¡ã§ããŸãã ãããã£ãŠãã³ã³ã¹ãã©ã¯ã¿ãŒå ã®åæåãããŠããªãã¡ã³ããŒã¯å¿ ããããšã©ãŒã§ã¯ãããŸããã ãããããã®èšºæã¯ã°ã©ãã®äžçªäžã«ãããŸãããããæ¬åœã«ééãã§ããå Žåãããã°ã©ã ã®ããã©ãŒãã³ã¹ã«é倧ãªåœ±é¿ãäžããããã§ãã åæåãããŠããªãå€æ°ã®äœ¿çšã¯é倧ãªæ¬ é¥ã§ãã
ã¢ã€ãã¢ãæ確ã§ããããšãé¡ã£ãŠããŸãã ãã ããã°ã©ãäžã®ãã®ãããªãšã©ãŒã®ååžã¯èªèãã«ããããšã«èªè ã¯åæãããšæããŸãã ãããã£ãŠãäžéšã®ã¢ãã©ã€ã¶ãŒã¯ããã®ã°ã©ãã9åãŸãã¯4åã®ã»ã«ã®è¡šã«åçŽåããŸãã

å³2.ç°¡ç¥åãããåé¡ãªãã·ã§ã³ã 4ã€ã®ã»ã«ã䜿çšãããŸãã
ããšãã°ãGoannaã¢ãã©ã€ã¶ãŒã®äœæè ã¯ãCoverityãè²·åãããŸã§è¡åããŸããããSynopsysã¯åŸã«è²·åããŸããã 圌ãã¯ãã¢ãã©ã€ã¶ãŒã«ãã£ãŠçºè¡ãããèŠåãåé¡ãã9ã€ã®ã»ã«ã®ããããã«é¢é£ä»ããŸããã

å³3. Goannaãªãã¡ã¬ã³ã¹ã¬ã€ãïŒããŒãžã§ã³3.3ïŒã®äžéšã 9åã®ã»ã«ã䜿çšãããŸãã
ãã ãããã®æ¹æ³ãçããã䜿çšããã«ã¯äžäŸ¿ã§ãã ããã°ã©ããŒã¯ãèŠåã1次å ã°ã©ãäžã«é 眮ããããšãæãã§ããŸããããã¯éèŠã§ã¯ãããŸãã->éèŠã§ãã ç¹ã«ãç°ãªãã¬ãã«ã«åããããã³ã³ãã€ã©èŠåã¯åãååã«åºã¥ããŠãããããããã¯äžè¬çã§ãã
2次å ã®åé¡ã1次å ã«æžããããšã¯ç°¡åã§ã¯ãããŸããã ããã¯ãPVS-Studioã¢ãã©ã€ã¶ãŒã§è¡ã£ãããšã§ãã åçŽã«2次å ã°ã©ãã®äžéšããããŸããã

å³4.é倧床ã®é«ãã¢ã©ãŒããã©ã€ã³äžã«æ圱ããŸãã ãšã©ãŒã¯ä¿¡é Œæ§ã«ãã£ãŠåé¡ããå§ããŸãã
äžæ£ãªããã°ã©ã æäœã«ã€ãªããå¯èœæ§ã®ãããšã©ãŒã®ã¿ãç¹å®ããŸãã ãã¡ã€ã«ã®å é ã«ããå¿ããããã³ã¡ã³ãã¯ãããã°ã©ã ã®ã¯ã©ãã·ã¥ã«ã€ãªããããšã¯ãªããèå³æ·±ããã®ã§ã¯ãããŸããã ããããããã¯é倧ãªãšã©ãŒã§ãããããã¯ã©ã¹ã®åæåãããŠããªãã¡ã³ããŒãæ¢ããŠããŸãã
ãããã£ãŠãä¿¡é Œæ§ã®ã¬ãã«ã«å¿ããŠãšã©ãŒãåé¡ããå¿ èŠããããŸãã ãã®ã¬ãã«ã®ä¿¡é Œæ§ã¯ã3ã€ã®ã°ã«ãŒãïŒé«ãäžãäœïŒã®ã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžã®ååžã«ãããŸããã

å³5. PVS-Studioã€ã³ã¿ãŒãã§ãŒã¹ãŠã£ã³ããŠã®ãã©ã°ã¡ã³ãã é«ããã³äžã¬ãã«ã®äžè¬çãªèšºæã®è¡šç€ºãå«ãŸããŠããŸãã
ããã«ãã¢ãã©ã€ã¶ãŒããšã©ãŒãæ€åºããŠèª€æ€ç¥ãäžããªãã£ãããšãã©ã®çšåºŠç¢ºä¿¡ããŠãããã«å¿ããŠãåãèŠåãç°ãªãã¬ãã«ã«åé¡ãããå¯èœæ§ããããŸãã
åæã«ããã¹ãŠã®èŠåãããã°ã©ã ã«ãšã£ãŠéèŠãªãšã©ãŒãæ¢ãããšãç¹°ãè¿ããŸãã ã¢ãã©ã€ã¶ãŒãèªä¿¡ãæã£ãŠããããšãããã°ããšã©ãŒãèŠã€ããããšãå°ãªãããšããããŸãã
ã泚æ ãã¡ãããäžå®ã®çžå¯Ÿæ§ããããŸãã ããšãã°ãPVS-Studioã«ã¯ãV553ãšããèŠåããããŸããã¢ãã©ã€ã¶ãŒã¯ã2000è¡ãè¶ ããã³ãŒãã®é¢æ°ã«ééãããšãã«çæããŸãã ãã®ãããªé¢æ°ã«ãšã©ãŒãå«ããå¿ èŠã¯ãããŸããã ãããå®éã«ã¯ããã®é¢æ°ããšã©ãŒã®åå ã§ããå¯èœæ§ãéåžžã«é«ããªããŸãã ãã®ãããªé¢æ°ã¯ãåäœãã¹ãã§ã¯ãã¹ãã§ããŸããã ã³ãŒãå ã«ãã®ãããªé¢æ°ãååšããããšãæ¬ é¥ãšèŠãªãããšãã§ããŸãã ãã ãããã®ãããªèšºæã¯ãããã§ãããã¢ãã©ã€ã¶ãŒã®äž»ãªã¿ã¹ã¯ã¯ãé åå¢çã®é²åºãæªå®çŸ©ã®åäœãããã³ãã®ä»ã®èŽåœçãªãšã©ãŒãæ€çŽ¢ããããšã§ãïŒ è¡šãåç §ïŒã
誀æ€ç¥ãšä¿¡é Œæ°Žæº
PVS-Studioã®èŠåã¯ããããå€ããå°ãªããé倧ãªããã°ã©ã ã®èª€åäœã«ã€ãªãããšèšããã³ãŒããã©ã°ã¡ã³ããæ€åºããŸãã ãããã£ãŠãPVS-Studioã®èŠåã¬ãã«ã¯ãšã©ãŒã®é倧床ã§ã¯ãªãããšã©ãŒã®ä¿¡é Œæ§ã§ãã ãã ããã¬ãã«ããšã®ååžã«ã€ããŠã¯éèŠåºŠãèæ ®ããããšãã§ããŸãããå šäœåãéèŠã§ããããããã®ãããªå°ããªè©³çŽ°ã«ã€ããŠã¯èª¬æããŸããã
ç°¡åã«èª¬æãããšãã¬ãã«ã¯ç¹å®ããããšã©ãŒã®ä¿¡é Œæ§ã§ã ã
åã®èšäºã§è¡šæãããæ¹å€ã¯ã誀ã£ãèŠåãšæŠãéã«ãæçšãªèŠåã倱ãå¯èœæ§ããããšããäºå®ã«èŠçŽãããŸããã å®éãèŠåã¯éåžžæ¶ããããšã¯ãªããä¿¡é Œã¬ãã«ã«æ²¿ã£ãŠã®ã¿ç§»åããŸãã ãããŠãèªè ãå¿é ãããããã®ãŸããªãšã©ãŒãªãã·ã§ã³ã¯ãååãšããŠäœã¬ãã«ã§èç©ããã ãã§ããã衚瀺ããããšã¯ãå§ãããŸããã ãŸã£ããæå³ã®ãªãèŠåã®ã¿ããå®å šã«æ¶ããŠããŸããŸãã

å³6.äœããæºåããŠããã®ã¯è¯ãããšã§ãã ããããããæç¹ã§åæ¢ããå¿ èŠããããŸãã
èªè ã¯æçšãªã¡ãã»ãŒãžãæ¶ããå¯èœæ§ããããšç§ã®èšèã§æããã«èŠåãããã ãããåŠå®ããçç±ã¯ãããŸããã ãã®ãããªç¢ºçã¯ååšããŸãããããŸãéèŠã§ã¯ãªãã®ã§å¿é ããå¿ èŠã¯ãããŸããã ãããã®ã±ãŒã¹ãèæ ®ããããšã¯æå³ããªãããšãäŸã§ç€ºããŸãã ããããããŸããŸãªã¬ãã«ã§ã¡ãã»ãŒãžãæçš¿ãããããã¯ããå§ããŸãããã
å Žåã«ãã£ãŠã¯ãã©ã®ã¬ãã«ã®ä¿¡é ŒåºŠã§èŠåãçºãã¹ãããããã«æããã«ãªããŸãã äŸãšããŠã次ã®ãšã©ãŒãã¿ãŒã³ãæ€åºããç°¡åãªV518蚺æãèããŸãã
char *p = (char *)malloc(strlen(src + 1));
æãå¯èœæ§ãé«ãã®ã¯ããã©ã±ããã誀ã£ãŠé 眮ããããšã§ãã ã¿ãŒããã«0ãé 眮ããå Žæãã§ããããã«ã1ãè¿œå ãããã£ãã®ã§ãã ãããããããã¯èª€ã£ãŠããããã®çµæãã¡ã¢ãªã¯å¿ èŠä»¥äžã«2ãã€ãå²ãåœãŠãããŠããŸããã
çè«çã«ã¯ãããã°ã©ããŒããŸãã«ãã®ãããªã³ãŒããæžããããšæã£ãŠãããšæ³åã§ããŸããããã®å¯èœæ§ã¯éåžžã«å°ããã§ãã ãããã£ãŠããã®èŠåã®ä¿¡é Œæ§ã¯éåžžã«é«ããåžžã«é«ã¬ãã«ã®ã¡ãã»ãŒãžã«é 眮ãããŸãã
ãšããã§ããã®èšºæã«ã¯ãåäžã®äŸå€ãããããŸããã ãã®ãããªãã¿ãŒã³ãèŠã€ãã£ãå Žåã¯ããšã©ãŒã§ãã
ãã®ä»ã®å Žåããšã©ãŒã®ä¿¡é Œæ§ãäœããã¡ãã»ãŒãžãåžžã«äœã¬ãã«ã«éä¿¡ãããããšãããã«æããã«ãªããŸãã ãã®ãããªèšºæã¯ã»ãšãã©ãããŸãããããã¯ã蚺æã倱æããããšãå€æããããšãæå³ããŸãã ãããã®æããªèšºæã®1ã€ã¯V608ã§ãããæ瀺çãªãã£ã¹ãã§æ§æãããéè€ã·ãŒã±ã³ã¹ãæ€åºããŸãã ãã©ãŒã ã®åŒãæ€çŽ¢ãããŸãïŒ
y = (A)(B)(A)(B)x;
ãªããã®èšºæãããã®ãèŠããŠããŸããã ãããŸã§ã®ãšããããã®èšºæãæ¬åœã®ééããæããã«ããã®ãèŠãããšã¯ãããŸããã 圌女ã¯åé·ãªã³ãŒãïŒéåžžã¯è€éãªãã¯ãïŒãèŠã€ããŸãããããšã©ãŒã¯èŠã€ããŸããã§ããã
ã»ãšãã©ã®èšºæã¯ãå®éã®ãã°ãèŠã€ãã£ããšããã¢ãã©ã€ã¶ãŒã®ä¿¡é ŒåºŠã«å¿ããŠãã¬ãã«ããšã«ãå€åãããŸãã
ã¬ãã«ã次ã®ããã«è§£éããŸãã
é«ïŒæåã®ã¬ãã«ïŒã ããã¯ããããééãã§ãã å¿ ããã®ã³ãŒãããã§ãã¯ããŠãã ããïŒ ãããééãã§ããªãå Žåã¯ãã³ãŒãã®èšè¿°ãäžååã§ããå¯èœæ§ãé«ããããã¢ãã©ã€ã¶ãŒãéçºããŒã ã®ä»ã®ã¡ã³ããŒãæ··ä¹±ãããªãããã«ä¿®æ£ããå¿ èŠããããŸãã äŸã§èª¬æããŸãã
if (A == B) A = 1; B = 2;
ããããããã«ã¯ãšã©ãŒã¯ãªãããã¬ãŒã¹ã¯å¿ èŠãããŸããã ããã°ã©ããŒãåžžã«å€æ°Bã2ã«èšå®ãããã£ããšããå¯èœæ§ã¯ãããã§ãããããããšã©ãŒããªããŠãããã®ãããªã³ãŒããæžãçŽãããšã«èª°ããåæãããšæããŸãã
if (A == B) A = 1; B = 2;
äžïŒç¬¬2ã¬ãã«ïŒ ã ãã®ã³ãŒãã«ã¯ãšã©ãŒãå«ãŸããŠããããã§ãããã¢ãã©ã€ã¶ãŒã«ã¯ããããŸããã ãã¹ãŠã®é«ã¬ãã«ã®èŠåãä¿®æ£ããå Žåãäžã¬ãã«ã®èŠåãè¡äœ¿ãããšäŸ¿å©ã§ãã
äœïŒç¬¬3ã¬ãã«ïŒ ã äžè¬ã«åŠç¿ã«æšå¥šããªãäœä¿¡é ŒåºŠã®èŠåã ãããžã§ã¯ãã®ãã§ãã¯ã«é¢ããèšäºãäœæãããšãã¯ãé«ã¬ãã«ãšäžã¬ãã«ã®ã¿ãèæ ®ããäœã¬ãã«ã«ã¯é£çµ¡ããªãããšã«æ³šæããŠãã ããã
Unreal Engineãããžã§ã¯ãã«åãçµãã ãšããããŸã£ããåãããšãããŸããã ç§ãã¡ã®ç®æšã¯ãäžè¬ç®çã®ç¬¬1ã¬ãã«ãšç¬¬2ã¬ãã«ã®ãã¹ãŠã®èŠåãæé€ããããšã§ããã ç§ãã¡ã¯ç¬¬äžã¬ãã«ãèŠãŸããã§ããã
åè¿°ããããã«ãã»ãšãã©ã®èšºæã«ã¯ãçç¶ã®ã»ããã«å¿ããŠç°ãªãã¬ãã«ãå²ãåœãŠãããšãã§ããŸãã äžéšã®çç¶ã¯æžå°ãããããããŸããããä»ã®çç¶ã¯èªä¿¡ãé«ããŸãã ãããã¯ã100ãè¶ ãããªãŒãã³ãããžã§ã¯ãã§ã®èšºæã®å®è¡ã«åºã¥ããŠçµéšçã«éžæãããŸãã
蚺æãããŸããŸãªã¬ãã«ã«ã©ã®ããã«ç§»è¡ã§ããããæ€èšããŠãã ããã ããšãã°ãçãããæ瀺çãªåå€æãèŠåããV572蚺æã䜿çšããŸãã newæŒç®åã䜿çšããŠãã¯ã©ã¹ã®ãªããžã§ã¯ããäœæããããã®ãã€ã³ã¿ãŒãå¥ã®åã«ãã£ã¹ããããŸãã
T *p = (T *)(new A);
ããã¯å¥åŠãªãã¶ã€ã³ã§ãã ã¯ã©ã¹Aã Tããç¶æ¿ãããå Žåãåå€æã¯äžèŠã§ãããåçŽã«åé€ã§ããŸãã ç¶æ¿ãããªãå Žåãããã¯ããããééãã§ãã ãã ããã¢ãã©ã€ã¶ãŒã¯ãããééãã§ããããšãå®å šã«ç¢ºä¿¡ããŠããªããããæåã«äžçšåºŠã®ä¿¡é Œã¬ãã«ãå²ãåœãŠãŸãã ãã®ãã¶ã€ã³ãã©ããªã«å¥åŠã§ãã£ãŠããæ£ããåäœããã³ãŒãã«å¯Ÿå¿ããããšããããŸãã äŸãæããããšã¯ã§ããŸããããªããªãããããã©ããªç¶æ³ãªã®ãèŠããŠããªãããã§ãã
èŠçŽ ã®é åãäœæãããŠããåºæ¬ã¯ã©ã¹ãžã®ãã€ã³ã¿ãŒã«å€æãããå Žåãããã¯ã¯ããã«å±éºã§ãã
Base *p = (Base *)(new Derived[10]);
ããã§ãã¢ãã©ã€ã¶ãŒã¯é«èŠåã衚瀺ããŸãã åºæ¬ã¯ã©ã¹ã®ãµã€ãºã¯çžç¶äººãããå°ããããããšãã§ããŸãããã®åŸã p [1]èŠçŽ ã«ã¢ã¯ã»ã¹ãããšãã«ããã©ãã«è¡ããªãã§ååŸãããäžæ£ãªããŒã¿ãåŠçããŸãã åºæ¬ã¯ã©ã¹ãšçžç¶äººã®ãµã€ãºãåãå Žåã§ãããã®ã³ãŒããç·šéããå¿ èŠããããŸãã ããã°ã©ããŒã¯å¹žéã«ãªããŸãããçžç¶äººã¯ã©ã¹ã«æ°ããã¡ã³ããŒãè¿œå ããããšã§ãã¹ãŠãç°¡åã«ç Žãããšãã§ããŸãã
åãåãžã®å€æãçºçãããšãéã®ç¶æ³ãçºçããŸãã
T *p = (T *)(new T);
ãã®ãããªã³ãŒãã¯ã誰ããCãé·æé䜿çšããŠããŠã mallocé¢æ°ã®åŒã³åºããšã¯ç°ãªããå¿ é ã®åå€æãäžèŠã§ããããšãå¿ãããšãã«è¡šç€ºãããããšããããŸãã ãŸãã¯ãå€ãã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããçµæãCããã°ã©ã ãC ++ããã°ã©ã ã«å€ãããŸãã
ããã«ã¯ãšã©ãŒã¯ãªããã¡ãã»ãŒãžã¯å®å šã«çç¥ã§ããŸãã 念ã®ãããããã¯æ®ããŸãããäœã¬ãã«ã«ç§»åããŸãã ãã®ã¡ãã»ãŒãžãèŠãŠã³ãŒããç·šéããå¿ èŠã¯ãããŸãããã誰ããã³ãŒãã«çŸãããããããããå Žåã¯æ°ã«ããŸããã
åã®èšäºãžã®ã³ã¡ã³ãã§ã人ã ã¯èŠåã誀ã£ãŠæ¶ããããšãå¿é ããŠããŸãããããã¯ãäœã確çã§ã¯ãããããšã©ãŒã瀺ããŠããå¯èœæ§ããããŸãã ååãšããŠããã®ãããªã¡ãã»ãŒãžã¯æ¶ããŸããããäœã¬ãã«ã«ç§»åããŸãã 調ã¹ãäŸã®1ã€ã¯ããT * p =ïŒT *ïŒïŒæ°ããTïŒ;ãã§ãã ããã«ã¯ééãã¯ãããŸããããçªç¶äœããééã£ãŠããŸã...åžæãã人ã¯ã³ãŒããå匷ã§ããŸãã
å¥ã®äŸãèŠãŠã¿ãŸãããã V531蚺æïŒ1ã€ã®sizeofãå¥ã®sizeofã§ä¹ç®ããŸãïŒ
size_t s = sizeof(float) * sizeof(float);
ããã¯ç¡æå³ãªè¡šçŸã§ããããããããã¿ã€ããã¹ãªã©ãããã§äœããã®ééããè¡ãããå¯èœæ§ããããŸãã ã¢ãã©ã€ã¶ãŒã¯ããã®ã³ãŒãã«å¯ŸããŠé«èŠåãçºè¡ããŸãã
ãã ããèŠåã¬ãã«ã[äœ]ã«çœ®ãæããããå ŽåããããŸãã ããã¯ãèŠå ã®1ã€ãsizeofïŒcharïŒã®å Žåã«çºçããŸãã
100ãè¶ ãããããžã§ã¯ãã§èŠ³å¯ããããã¹ãŠã®åŒãsizeofïŒTïŒ* sizeofïŒcharïŒãã¯ãšã©ãŒã§ã¯ãããŸããã§ããã ã»ãšãã©åžžã«ããããã¯ããçš®ã®ãã¯ãã§ããããã®ãããªä¹ç®ã¯ããããã¯ããå¥ã®ãã¯ãã«çœ®ãæããããã«åŸãããŸããã
ãããã®èŠåã¯èŠãããšãã§ããªããããäœèŠåã»ã¯ã·ã§ã³ã§ãŠãŒã¶ãŒã®ç®ããé ãããŠããŸãã ããããåžæãã人ã¯ãŸã ããããå匷ããããšãã§ããŸãã

å³7.èªè ã¯ãäœã¬ãã«ã®ã¢ã©ãŒãã®åºå€§ãªé åããã€ã§ãèªè¡ã§ããããšãç¥ã£ãŠããŸãã
蚺æã®äŸå€
äŸå€ã¯ãåã ã®èšºæãšã蚺æã®ã°ã«ãŒãã®äž¡æ¹ã«äœçšããŸãã ã倧éç Žå£ã®é€å€ãããå§ããŸãããã ããã°ã©ã ã«ã¯å®è¡ãããªãã³ãŒãããããŸãã å®éããã®äžã§ãšã©ãŒãæ¢ãããšã¯ã§ããŸããã ã³ãŒããå®è¡ãããªããšããšã©ãŒã¯çŸããŸããã ãããã£ãŠãå€ãã®èšºæã¯éå®è¡å¯èœã³ãŒãã«ã¯é©çšãããŸããã ãããäŸã§èª¬æããŸãã
int *p = NULL; if (p) { *p = 1; }
ãã€ã³ã¿ãŒãéæ¥åç §ããå Žåãå¯èœãªå¯äžã®å€ã¯NULLã§ãã å€æ°ãpãã«æ ŒçŽã§ããä»ã®å€ã¯ãããããŸããã ãã ããéåç §ã¯å®è¡ãããªãã³ãŒãå ã«ãããšããäŸå€ãã¹ããŒãããŸãã ãããŠãå®è¡ãããªããããééãã¯ãããŸããã NULL以å€ã®å€ãå€æ°pã«èšå®ãããŠããå Žåã«ã®ã¿ãéåç §ãå®è¡ãããŸãã
æ¡ä»¶ã¯åžžã«falseã§ããããšãéç¥ãããã®ã§ã誰ããèŠåã圹ç«ã€ãšèšããããããŸããã ããããããã¯ä»ã®èšºæãããšãã°V547ã®æžå¿µäºé ã§ãã
äžèšã®ã³ãŒãã§nullãã€ã³ã¿ãŒãéåç §ãããŠããããšãã¢ãã©ã€ã¶ãŒãèŠåãå§ãããã誰ãã«åœ¹ç«ã€ã§ããããïŒ ãã
次ã«ã蚺æã®ç¹å®ã®äŸå€ã«ç®ãåããŸãã 以åã«ã¬ãã¥ãŒããV572蚺æã«æ»ããŸãããã
T *p = (T *)(new A);
ãã®ã¡ãã»ãŒãžãçºè¡ãããªãå Žåã¯äŸå€ããããŸãã ãã®ãããªã±ãŒã¹ã®1ã€ã¯ã ïŒvoidïŒãžã®ãã£ã¹ãã§ãã äŸïŒ
(void) new A();
ãªããžã§ã¯ããäœæãããããã°ã©ã ã®æåŸãŸã§æèçã«çããŸãã ãã®ãã¶ã€ã³ã¯ãã¿ã€ããã¹ã«ããå¶ç¶ã«è¡šç€ºãããããšã¯ãããŸããã ããã¯ããã¥ãŒã®èšé²ã«é¢ããã³ã³ãã€ã©ãŒãšã¢ãã©ã€ã¶ãŒã®èŠåãæå¶ããããã®æèçãªã¢ã¯ã·ã§ã³ã§ãã
new A();
å€ãã®ããŒã«ã¯ããã®ãããªèšèšãèªããŸãã ã³ã³ãã€ã©ãŒ/ã¢ãã©ã€ã¶ãŒã¯ã人ãnewãªãã¬ãŒã¿ãŒãè¿ããã€ã³ã¿ãŒãæžãã®ãå¿ããããšãçããŸãã ãããã£ãŠã人ã ã¯æå³çã« voidåã«ãã£ã¹ããè¿œå ããããšã§èŠåæå¶ã䜿çšããŸããã
ã¯ãããã®ã³ãŒãã¯å¥åŠã§ãã ãããããã®ã³ãŒãããã®ãŸãŸã«ããŠããããã«æ±ããããã®ã§ããããããªããããå¿ èŠãããããšã§ãã ã¢ãã©ã€ã¶ãŒã®ã¿ã¹ã¯ã¯ãšã©ãŒãæ¢ãããšã§ãããã³ã³ãã€ã©ãŒ/ã¢ãã©ã€ã¶ãŒãæ··ä¹±ãããŠèŠåãåãé€ãããã«ãããã«æŽç·Žãããæ§é ãæžãããã«åŒ·å¶ããããšã§ã¯ãããŸããã
ãšã«ãã誰ããèŠåãåºãããšã¯æçšã§ããããïŒ ãã ãã®ã³ãŒããæžãã人ã¯èª°ã«ã§ãæè¬ããŸããã
V531ã®èšºæã«æ»ããŸãã
sizeof(A) * sizeof(B)
äœã¬ãã«ã§ãã£ãŠããã¡ãã»ãŒãžãéä¿¡ããªãå ŽåããããŸããïŒ ã¯ãããããŸãã
å žåçãªã¿ã¹ã¯ïŒãããã¡ãŒã®ãµã€ãºãèšç®ããå¿ èŠããããŸããããã®ãµã€ãºã¯å¥ã®ãããã¡ãŒã®ãµã€ãºã®åæ°ã§ãã intåã®125èŠçŽ ã®é åãããã doubleåã®125èŠçŽ ã®é åãäœæããå¿ èŠããããšããŸãããã ãããè¡ãã«ã¯ãé åèŠçŽ ã®æ°ã«ãªããžã§ã¯ãã®ãµã€ãºãæããå¿ èŠããããŸãã ããã¯ãèŠçŽ ã®æ°ãèšç®ããã®ãééããç¯ããããå Žåã§ãã ãããã£ãŠãããã°ã©ããŒã¯ç¹å¥ãªãã¯ãã䜿çšããŠãèŠçŽ ã®æ°ãå®å šã«èšç®ããŸãã ãããè¡ãçç±ãšæ¹æ³ã®è©³çŽ°ã«ã€ããŠã¯ãããŸããŸãªèšäºã«ç¹°ãè¿ãæžããŠããŸãïŒ ãã㧠arraysizeãã¯ãã®èª¬æãåç §ããŠãã ããïŒã
ãã¯ããå±éãããšããã©ãŒã ã®æ§é ãååŸãããŸãã
template <typename T, size_t N> char (*RtlpNumberOf( __unaligned T (&)[N] ))[N]; .... size_t s = sizeof(*RtlpNumberOf(liA->Text)) * sizeof(wchar_t);
æåã®sizeof㯠ãèŠçŽ ã®æ°ãèšç®ããããã«äœ¿çšãããŸãã 2çªç®ã®sizeofã¯ããªããžã§ã¯ãã®ãµã€ãºãèšç®ããŸãã ãã®çµæããã¹ãŠãæ£åžžã§ãããé åã®ãµã€ãºããã€ãåäœã§æ£ããèšç®ããŸãã ããããèªè ã¯å®éã«è°è«ãããŠããããšãç解ããŠããªãã§ãããã è¬çœªããŸãããç©èªã®æ¬è³ªããéžè±ããŠèª¬æãããããããŸããã
äžè¬ã«ã2ã€ã®sizeofæŒç®åã®ä¹ç®ãå®å šã«æ£åžžã§äºæ³ãããå Žåãããã€ãã®éæ³ããããŸãã ã¢ãã©ã€ã¶ãŒã¯ããããã¡ãŒã®ãµã€ãºãèšç®ããããã®ãã®ãããªãã¿ãŒã³ãèªèã§ããèŠåãçæããŸããã
ãšã«ãã誰ããèŠåãåºãããšã¯æçšã§ããããïŒ ãã ããã¯å®å šã«æ£ãããé©åã«èšè¿°ãããã³ãŒãã§ãã ã ããæžãå¿ èŠããããŸãã
ç¶ããŸãããã ã¢ãã©ã€ã¶ãŒã¯ããã©ãŒã ã®ãã¶ã€ã³ã§èŠåV559ãçºè¡ããŸãã
if (a = 5)
ãã®ãããªã³ãŒãã®èŠåãæå¶ããã«ã¯ãåŒãäºéæ¬åŒ§ã§å²ãå¿ èŠããããŸãã
if ((a = 5))
ããã¯ãã¢ãã©ã€ã¶ãŒãšã³ã³ãã€ã©ãŒã«ãšã©ãŒããªããæ¡ä»¶å ã®å€ãæèçã«é©åã«ããããšãããã³ãã§ãã ãã®ãããªãã³ãã¡ãœããã誰ããã€äœæãããã¯ããããŸããããå€ãã®ã³ã³ãã€ã©ãŒãšã¢ãã©ã€ã¶ãŒã«ãã£ãŠåºãèªèãããµããŒããããŠããŸãã
ãã¡ãããPVS-Studioã¢ãã©ã€ã¶ãŒã¯ããã®ãããªã³ãŒãã«ã€ããŠãæ²é»ããŠããŸãã
ãããããèŠåãå®å šã«æå¶ããã®ã§ã¯ãªããèŠåãäœã«ç§»åãã䟡å€ããã£ãã®ã§ããããïŒ ãã
人ãééã£ãè¡šçŸã誀ã£ãŠäœåãªæ¬åŒ§ã§å²ãå¯èœæ§ã¯ãããŸããïŒ ã¯ãããããŸãããéåžžã«å°ããã§ãã ãã©ã±ãããè¿œå ããŸããïŒ ããã¯æããŸãã ãããã ifã¹ããŒãã¡ã³ãããšã«1000åçºçããŸãã ãŸãã¯ããã«å°ãªãé »åºŠã ãããã£ãŠãäœåãªãã©ã±ããã®ããã«ãšã©ãŒãèŠèœãšãããå¯èœæ§ã¯ã1/1000æªæºã§ãã
ãšã«ããèŠåãåºãã»ããããã§ããããïŒ ãã ãããã£ãŠãã³ãŒãããã®èŠåãåé¿ããããã®ãåæ³çãªæ©äŒãã人ãã奪ããŸãããè¿œå ã®ãšã©ãŒãèŠã€ããå¯èœæ§ã¯éåžžã«å°ããã§ãã
ååã®èšäºã®ã³ã¡ã³ãã§æ¢ã«åæ§ã®è°è«ãè¡ã£ãŠããŸãããçãçŽåŸããããã®ã§ã¯ãããŸããã§ããã ãããã£ãŠããã®ãããã¯ã«ãã1ã€ã®åŽé¢ããã¢ãããŒãããããšããŸãã
ãã¹ãŠã®èŠåãèŠãããšäž»åŒµãã人ã ã«è³ªåããããŸãã ãŠããããã¹ãã100ïŒ ã³ãŒãã§ã«ããŒããŸãããïŒ ããïŒ ééãããããããããªãã®ã§ãã©ãããŠïŒ
ãµã ã¯å¯ŸæŠçžæã«çããŸãã ãã¹ãã§ã³ãŒãã®100ïŒ ãã«ããŒããããšã¯éåžžã«é£ãããé«äŸ¡ã§ãã 100ïŒ ã®è£åã«å¯ŸããŠæ¯æãããäŸ¡æ Œã¯ãæéãšåŽåã®æè³ãè¿æžããŸããã
ããã¯ãéç解æã§ãåãã§ãã 亀差ç¹ã«ã¯ãã¢ãã©ã€ã¶ãŒã®èŠåãåæããæéã劥åœãªå¶éãè¶ ããæ©èœããããŸãã ãããã£ãŠãå¯èœãªéãå€ãã®èŠåãçºè¡ããå®çšçãªçç±ã¯ãããŸããã
èŠåV559ãçºè¡ãããªãå¥ã®ã±ãŒã¹ãèŠãŠã¿ãŸãããã
if (ptr = (int *)malloc(sizeof(int) * 100))
ããã¯ãã¡ã¢ãªãå²ãåœãŠãåæã«ã¡ã¢ãªãå²ãåœãŠãããŠããããšã確èªããããã®å€å žçãªãã¿ãŒã³ã§ãã ããã«ééãããªãããšã¯æããã§ãã ç·ã¯æããã«æžããããªãã£ãïŒ
if (ptr == (int *)malloc(sizeof(int) * 100))
ãã®åŒã«ã¯å®çšçãªæå³ã¯ãªããããã«ã¡ã¢ãªãªãŒã¯ãçºçããŸãã ãããã£ãŠãæ¡ä»¶å ã§ã®å²ãåœãŠã¯ãããã°ã©ããŒããŸãã«æãã§ããããšã§ãã
ã¢ãã©ã€ã¶ãŒããã®ãããªèšèšã«ã€ããŠèŠåãçºããå Žåãæçã§ããããïŒ ãã
ãã®ç« ãäŸå€ã®å¥ã®äŸã§ç· ãããããŸããããããã¯æ£åœåããã®ãé£ããã§ãããããç§ãã¡ã®å²åŠãèªè ã«äŒããããšæããŸãã
Diagnostics V501ã¯ãäŸå€ã®æ°ã«ããããªãŒããŒã®1ã€ã§ãã ãã ãããããã®äŸå€ã¯ã蚺æãå¹æçã«æ©èœããããšã劚ããŸããïŒ èšŒæ ïŒã
蚺æã¯ã次ã®åœ¢åŒã®åŒã«é¢ããèŠåãçºè¡ããŸãã
if (A == A) int X = Q - Q;
å·Šå³ã®ãªãã©ã³ããåäžã®å Žåãããã¯çãããã§ãã
1ã€ã®äŸå€ã¯ãæŒç® '/'ãŸã㯠'-'ãæ°å€å®æ°ã«é©çšãããŠããå ŽåãèŠåãçºè¡ããªãããšã§ãã äŸïŒ
double w = 1./1.; R[3] = 100 - 100;
äºå®ãããã°ã©ããŒã¯ãã®ãããªåŒãåçŽåããã«å ·äœçã«æžãããšããããããŸãã ããã«ãããããã°ã©ã ã®æå³ãç解ãããããªããŸãã ã»ãšãã©ã®å Žåããã®ãããªç¶æ³ã¯ãå€ãã®èšç®ãå®è¡ããã¢ããªã±ãŒã·ã§ã³ã§èŠãããŸãã
åæ§ã®åŒãæã€å®éã®ã³ãŒãã®äŸïŒ
h261e_Clip(mRCqa, 1./31. , 1./1.);
ãã®ãããªäŸå€ãåå ã§äœããã®ãšã©ãŒãã¹ãããã§ããŸããïŒ ã¯ããã§ããŸãã ãã ãã誀æ€ç¥ãæžããããšã®å©ç¹ã¯ãæçšãªèŠåã倱ãããšã®æœåšçãªå©ç¹ãã¯ããã«äžåããŸãã
ãã®ãããªé€ç®ãŸãã¯æžç®ã¯ãããã°ã©ãã³ã°ã®æšæºçãªäžè¬çãªæ £è¡ã§ãã è¡çºã倱ããªã¹ã¯ã¯æ£åœåãããŸãã
ãããã圌ãã¯ããã«å¥ã®è¡šçŸãæžãããã£ãã®ã§ããããïŒ ã¯ããããã¯é€å€ãããŸããã ãããããã®ãããªæšè«ã¯ã©ãã«ãè¡ããªãéã§ãã ãçªç¶äœãä»ã®ãã®ãæžãããã£ãããšãããã¬ãŒãºã¯ã1/31ã«é©çšã§ããŸãã ãããŠãããã§ç§ãã¡ã¯ãããã°ã©ã ã®ãã¹ãŠã®è¡ã«å¯ŸããŠåçŽã«é£ç¶ããŠèªãçæ³çãªã¢ãã©ã€ã¶ãŒã®ã¢ã€ãã¢ã«çããŸãã 空ã®ãã®ã«ããã çªç¶ãããã空ã§ããã®ã¯ééã£ãŠããŸãã çªç¶ãé¢æ°fooïŒïŒãåŒã³åºãå¿ èŠããããŸããã

å³8.åæ¢ã§ããå¿ èŠããããŸãã ããããªããšã蚺æã®äŸ¿å©ãªãŠã©ãŒã¯ã¹ã«ãŒããŽãã«ãªããŸãã
äŒç€Ÿã«ãšã£ãŠåœ¹ã«ç«ããªã1000ã衚瀺ãããããã1ã€ã®æçšãªã¡ãã»ãŒãžã倱ãæ¹ãè¯ãã§ãã ããã«ã€ããŠæãããããšã¯äœããããŸããã ãšã©ãŒæ€åºã®å®å šæ§ã¯ãã¢ãã©ã€ã¶ãŒã®æçšæ§ã®å¯äžã®åºæºã§ã¯ãããŸããã åæ§ã«éèŠãªã®ã¯ãæçšãªã¡ãã»ãŒãžãšåœ¹ã«ç«ããªãã¡ãã»ãŒãžã®ãã©ã³ã¹ã§ãã 泚æåã¯ããã«å€±ãããŸãã å€æ°ã®èª€æ€ç¥ã®ããã¬ããŒããèŠããšã人ã¯èŠåã«éåžžã«ç¡é çã«ãªãå§ããå€ãã®ãšã©ãŒãã¹ããããããšã©ãŒã§ã¯ãªããšããŒã¯ããŸãã
ããäžåºŠç°¡åã«äŸå€ã«ã€ããŠ
ç§ã¯ãã¹ãŠã詳现ã«èª¬æããããã«æããŸããããã®ã¿ã€ãã®ã³ã¡ã³ããåã³èãããšãã§ãããšæããŸãïŒ
æ©èœãšããã«å¯Ÿå¿ãããªã³/ãªããã¿ã³ãäœæããã ãã§ãªãã誀解ã«ã€ããŠæå¥ãèšãã¹ãçç±ãããããŸããã å¿ èŠãªå Žåã¯äœ¿çšããŸããäžèŠãªå Žåã¯å¿ èŠãããŸããã䜿çšããªãã§ãã ããã ã¯ããããã¯ä»äºã§ãã ããããã¯ããããã¯ããªãã®ä»äºã§ãã

å³9.ãã¹ãŠã®ãã£ã«ã¿ãªã³ã°ã¢ã©ãŒããç¡å¹ã«ããèšå®ãäœæããããšãããŠãã³ãŒã³ã®åå¿ã
äŸå€ããªãã«ããŠå¶éãªãã«ãã¹ãŠã®èŠåã衚瀺ãããã¿ã³ãäœæããããšããå§ãããŸãã
ãã®ãããªãã¿ã³ã¯ãã§ã«ã¢ãã©ã€ã¶ãŒã«ãããŸãïŒ ãããŸãïŒ ãäœããšåŒã°ããæå°ã¬ãã«ã®ä¿¡é Œæ§ã§èŠåã衚瀺ããŸãã
ã©ããããå€ãã¯åã«ãäŸå€ããšããçšèªã誀解ããŠããŸãã äŸå€ãšããŠãåé¡ãé©åã«èšºæããããã«ã絶察ã«å¿ èŠãªå€ãã®æ¡ä»¶ãäœæãããŸãã
ããã«ã€ããŠã¯ã V519ã®èšºæã«åºã¥ããŠèª¬æããŸãã å€ãåããªããžã§ã¯ãã«é£ç¶ããŠ2åå²ãåœãŠãããããšãèŠåããŸãã äŸïŒ
x = 1; x = 2;
ãã ãããã®åœ¢åŒã§ã®ã¿ã蚺æã¯é©çšãããŸããã ãããã£ãŠã次ã®ãããªæ¹è¯ãå§ãŸããŸãã
äŸå€N1ã ãªããžã§ã¯ãã¯ã=æŒç®ã®å³ãªãã©ã³ãã®äžéšãšããŠ2çªç®ã®åŒã«åå ããŸãã
ãã®äŸå€ãåé€ããããšãã¢ãã©ã€ã¶ãŒã¯å®å šã«æ£åžžãªã³ãŒããèªããŸãã
x = A(); x = x + B();
誰ãããã®çš®ã®ã³ãŒããèŠãããã«æéãšãšãã«ã®ãŒãè²»ããããã§ããïŒ ãã ãããŠãç§ãã¡ã«å察ãçŽåŸãããããšã¯å€±æããŸãã
äž»ãªèã
ãã®èšäºã§ã¯ã誰ãã«äœãã蚌æãŸãã¯æ£åœåããç®çã¯ãããŸããã ãã®ç®çã¯ãèªè ã®èããæ£ããæ¹åã«åããããšã§ãã ã¢ãã©ã€ã¶ãŒããå¯èœãªéãå€ãã®èŠåãååŸããããšãããšãéå¹æã«ãªããšèª¬æããããšæããŸãã ããã¯ãéçºããããããžã§ã¯ãã®ä¿¡é Œæ§ãé«ããã®ã«ã¯åœ¹ç«ã¡ãŸããããããã°ã©ã ã®å質ãæ¹åããããã®ä»£æ¿æ¹æ³ã«è²»ããããšãã§ããæéãããããŸãã
éçã³ãŒãã¢ãã©ã€ã¶ãŒã¯ããã¹ãŠã®ãšã©ãŒãæ€åºããããšã¯ã§ããŸããã ãŸããä»ã®æ©åšã䜿çšã§ããŸããã ç¹å¹è¬ã¯ãããŸããã ãœãããŠã§ã¢ã®å質ãšä¿¡é Œæ§ã¯ãããŸããŸãªããŒã«ãé©åã«çµã¿åãããããšã§å®çŸããã1ã€ã®ããŒã«ã§å¯èœãªããšãšäžå¯èœãªããšããã¹ãŠçµãåºãããšããããšã§ã¯ãããŸããã
é¡æšããŸãã 圌ãã¯ããŸããŸãªèŠçŽ ã®çµã¿åããã䜿çšããŠã建èšçŸå Žã§å®å šãéæããããšããŸããå®å šãã¬ãŒãã³ã°ããã«ã¡ããã®ççšãé ã£ãŠããéã¯ä»äºãå§ããããšã®çŠæ¢ãªã©ã§ãã 1ã€ã®ã³ã³ããŒãã³ãã®ã¿ãéžæãããã¹ãŠã®åé¡ã解決ããããšãæåŸ ããã®ã¯éå¹ççã§ãã å èµã®ã¬ã€ã¬ãŒã«ãŠã³ã¿ãŒãšæ¯æ¥ã®çµŠæ°Žã§ãçŽ æŽãããè£ ç²ãã«ã¡ãããäœæã§ããŸãã ããããããã¯ãã¹ãŠãé«å°ã§ã®äœæ¥ãè¡ããšãã«ããªããèœäžããããšããããªããæãããã§ã¯ãããŸããã ããã§ã¯ãå¥ã®ããã€ã¹ãå¿ èŠã§ã-å®å šã±ãŒãã«ã ãã«ã¡ããã«çµã¿èŸŒãŸãããã©ã·ã¥ãŒãã®æ¹åããèãå§ããããšãã§ããŸãã ãã¡ãããããã¯èå³æ·±ããšã³ãžãã¢ãªã³ã°äœæ¥ã§ããããã®ãããªã¢ãããŒãã¯å®çšçã§ã¯ãããŸããã ããã«ããã«ã¡ããã®ééãšãµã€ãºãåççãªå¶éãè¶ ããŸãããã«ã¡ããã¯ãã«ããŒã«å¹²æžãå§ãã圌ããæãããä»äºã®ããŒã¹ãé ãããŸãããã«ããŒã¯äžè¬çã«ãã²ããã«ãã«ã¡ãããè±ãããã«ã¡ãããªãã§äœæ¥ãéå§ããå¯èœæ§ããããŸãã
ãŠãŒã¶ãŒãã¢ãã©ã€ã¶ãŒã®ãã¹ãŠã®èŠåãç¡å¹ã«ããå Žåãä¿¡é ŒåºŠããããŸã§ãããäœãèŠåãã§ããã ãå€ã衚瀺ããããšããã®ã¯äžåçã§ãããŠããããã¹ããå®è¡ããã³ãŒãã«ãã¬ããžãæ倧80ïŒ ã«ãããšãããã«äŸ¿å©ã«ãªããŸãã100ïŒ ã®ã«ãã¬ããžãå®è£ ãããããç¶æããã®ã«ãããæéã¯ããã®ã¢ã¯ã·ã§ã³ã®å©ç¹ãäžåãããã100ïŒ ã®ã«ãã¬ããžãç®æããŠåªåããå¿ èŠã¯ãããŸããããã®åŸãåçã³ãŒãã¢ãã©ã€ã¶ãŒã®1ã€ããã¹ãããã»ã¹ã«è¿œå ã§ããŸããåçã¢ãã©ã€ã¶ãŒãæ€åºããäžéšã®ã¿ã€ãã®æ¬ é¥ã¯ãéçã¢ãã©ã€ã¶ãŒãæ€åºã§ããŸããããããŠãã®éããããã£ãŠãåçããã³éçåæã¯äºãã«å®å šã«è£å®ããŸãã UIãã¹ããéçºã§ããŸãã
ãã®ãããªçµ±åãããã¢ãããŒãã¯ãããã°ã©ã ã®å質ãšä¿¡é Œæ§ã«ã¯ããã«è¯ã圱é¿ãäžããŸããããã€ãã®ãã¯ãããžãŒã䜿çšãããšããã¹ãã§ã³ãŒãå šäœã100ïŒ ã«ããŒãããããåªããå質ãå®çŸã§ããŸããåæã«ãã³ãŒãã®100ïŒ ã®ã«ãã¬ããžãã¯ããã«å€ãè²»ããããŸãã
å®éãéçã³ãŒãã¢ãã©ã€ã¶ãŒãããã£ã«ã¿ãŒåŠçãããŠããªãã¡ãã»ãŒãžãããã«å¿ èŠãšããŠãããšæžããŠãã人ã¯èª°ããåãã³ãŒãã¢ãã©ã€ã¶ãŒã䜿çšããããšã¯ãªããšæããŸãããŸãã¯ããšã©ãŒã®å¯åºŠãäœãããã¡ããããžã§ã¯ãã§è©ŠããŠã¿ããå®éã®ãããžã§ã¯ãã§ã¯ãåžžã«åé¡ãã€ãŸãæ¢åã®èª€æ€ç¥ã«å¯ŸåŠããæ¹æ³ããããŸããããã¯ãã¢ãã©ã€ã¶ãŒã®éçºè ãšãŠãŒã¶ãŒã®äž¡æ¹ãåãçµãå¿ èŠããã倧ããªèª²é¡ã§ããããã«èŠåã¯ã©ãã«ãããŸããïŒïŒ
ã¯ã©ã€ã¢ã³ããã1ã€ãŸãã¯å¥ã®èª€æ€ç¥ãæé€ããããã«äŸé ŒããæçŽãå®æçã«åãåããŸããããããç§ãã¡ã¯èããããšããªããããå€ãã®ã¡ãã»ãŒãžãäžãããã
ãããã«
ãã®èšäºãã次ã®ããšãåŠã³ãŸããã
- PVS-Studioã¢ãã©ã€ã¶ãŒã¯ãèãããæ€çŽ¢ããŸããããããã°ã©ã ã®èª€åäœã«ã€ãªããå¯èœæ§ã®ããå®éã®ãšã©ãŒãæ€çŽ¢ããŸãã
- 蚺æã¡ãã»ãŒãžã¯ã3ã€ã®ä¿¡é Œã¬ãã«ïŒé«ãäžãäœïŒã«åããããŸãã
- é«ããã³äžã¬ãã«ã®ã¿ãåŠç¿ããããšããå§ãããŸãã
- äŸå€ã«ãã£ãŠæçšãªãšã©ãŒãåé€ãããã®ã§ã¯ãªãããšå¿é ããŠãã人ã«ã¯ãããã¯ãŸããããŸãããã»ãšãã©ã®å Žåããã®ãããªç¡å¹ãªèŠåã¯äœã¬ãã«ã«ç§»åãããŠããŸãã[äœ]ã¿ããéããŠããã®ãããªèŠåã調ã¹ãããšãã§ããŸãã
- 蚺æã®äŸå€ã¯é¿ããããŸãããããã§ãªãå ŽåãããŒã«ã¯ãã«ã以äžã®å¹²æžãéå§ããŸãã
ãã®ãã°ãããèšäºãèªãã®ã«æéãå²ããŠãããçããã«æè¬ããŸããç§èªèº«ããããªã«é·ããªããšã¯æã£ãŠããŸããã§ãããããã¯ããããã¯ãäžèŠæããããããè€éã§ããããšã瀺ããŠããŸãã

ãŠãã³ãŒã³ã¯ãããã°ã©ã ã³ãŒãã®å質ãåŒãç¶ãä¿è·ããŸãã幞éããç¥ãããŸãããŸãããPVS-Studio 2017ãã®ãã¬ãŒã³ããŒã·ã§ã³ã«ã€ããŠããç解ãã ããã
ãã®èšäºãè±èªåã®èŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒAndrey Karpovã éçã¢ãã©ã€ã¶ãŒã誀æ€ç¥ãšæŠãæ¹æ³ãšããªãããããã®ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãåéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã