ãããªã²ãŒã æ¥çã§ãœãããŠã§ã¢ãéçºããŠããŠã補åã®å質ãæ¹åããããã«ä»ã«äœãã§ããã®ããéçºããã»ã¹ãç°¡çŽ åããããã«ãéçåæã䜿çšããªãã®ã§ã¯ãªãããšèããŠããå Žåã¯ãå§ããŸãããã çãïŒ ããŠãç§ã¯ããªãã«ãããçŽåŸãããããšããŸãã ãããªã²ãŒã æ¥çã®ããããããŒãç¯ããŠããééãã«æ³šç®ãããå Žåã¯ãåã³ãããªãã¯ãã®ã¢ãã¬ã¹ã«æ¥ãŸãã-æãèå³æ·±ããã®ãããªãã®ããã«ç¹å¥ã«éžã°ããŸããã
éç解æã䜿çšããçç±
ãããªã²ãŒã ã®éçºã«ã¯å€æ°ã®æ®µéãå«ãŸãããšããäºå®ã«ãããããããããã°ã©ãã³ã°ã¯äŸç¶ãšããŠäž»èŠãªæ®µéã®1ã€ã§ãã ããšãäœåè¡ãã®ã³ãŒããæžããªããŠããããŸããŸãªããŒã«ã䜿çšããå¿
èŠããããŸãããã®å質ã¯äœ¿ãããããšæçµçµæã«äŸåããŸãã ããªãããã®ãããªããŒã«ïŒããšãã°ãã²ãŒã ãšã³ãžã³ïŒã®éçºè
ã§ããã°ããã¹ãŠããã§ã«æ確ã«ãªã£ãŠããã¯ãã§ãã
éç解æããœãããŠã§ã¢éçºå
šè¬ã«åœ¹ç«ã€ã®ã¯ãªãã§ããïŒ
äž»ãªçç±ã¯ããã€ããããŸãã
- ä¿®æ£ãšã©ãŒã®ã³ã¹ããšè€éãã¯ãæéãšãšãã«å¢å ããŸãã éçåæã®äž»ãªå©ç¹ã®1ã€ã¯ãéçºã®åæ段éã§ã®ãšã©ãŒæ€åºã§ãïŒã³ãŒãã®äœææã«ãšã©ãŒãèŠã€ããããšãã§ããŸãïŒã ãããã£ãŠãéçã¢ãã©ã€ã¶ãŒã䜿çšãããšãé çã«ãªãåã«å€ãã®ãšã©ãŒãæ€åºããŠä¿®æ£ããããšã«ãããèªåãšååã®ç掻ãç°¡çŽ åã§ããŸãã
- éçåæã䜿çšãããšãããŸããŸãªãšã©ãŒãã¿ãŒã³ïŒã³ããŒããŒã¹ããã¿ã€ããã¹ãæ©èœã®èª€çšãªã©ïŒãç¹å®ã§ããŸãã
- ååãšããŠãéçåæã¯ãåçåæã§ã¯æ€åºããã«ããåé¡ãç¹å®ããã®ã«é©ããŠããŸãã ãã ããéããŸãçã§ãã
- ããŸããŸãªèŠåæå¶æ©èœïŒåäžããã¿ãŒã³å¥ãªã©ïŒãç¡é¢ä¿ãªèšºæã®ç¡å¹åãåæããã®ãã¡ã€ã«ãšãã£ã¬ã¯ããªã®ç¡å¹åã«ãããè² ã®äœ¿çšãã€ã³ãïŒããšãã°ã誀æ€åºïŒã¯éåžžãæ·±å»ãªéçã¢ãã©ã€ã¶ãŒã®éçºããŒã ã«ãã£ãŠãã¹ã ãŒãºåããããŸãã ããã«ãããã¢ãã©ã€ã¶ãŒãé©åã«æ§æããããšã§ãããã€ãºãã®å²åã倧å¹
ã«æžããããšãã§ããŸãã ååã®Andrei Karpovã¯ã EFLã³ã¢ã©ã€ãã©ãªã®ãã§ãã¯ã«é¢ããèšäºã§ ãã¢ãã©ã€ã¶ãŒãæ§æãããŠããå Žåã誀æ€ç¥ã®æ°ã¯10ã15ïŒ
ã«éããªãããšãå®èšŒããŸããã
ãšã«ãããããã¯ãã¹ãŠçè«ã§ãããããããããå®çšçãªäŸã«èå³ãããã§ãããã ããŠããããã以äžã«ç€ºããŸãã
Unreal Engineã®éç解æ
ãããŸã§èªãã ããšããããªããã¢ã³ãªã¢ã«ãšã³ãžã³ãšã¯äœãããšããã¯ã²ãŒã ãºãšã¯ã©ããªäŒç€Ÿãªã®ããäŒããŠã¯ãããŸããããããããã®äººãã¡ãããªãã®æš©éã楜ããã§ããªããªããããã䜿ã£ãŠããç§ã«æçŽãæžããŠãã ããã
PVS-StudioããŒã ã¯ãEpic GamesããŒã ãšæ°åååããUnreal Engineãããžã§ã¯ãã§éç解æãå®è£
ããã³äœ¿çšããã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ€åºããããšã©ãŒ/誀æ€ç¥ãä¿®æ£ããã®ãæ¯æŽããŸããã åæ¹ã«ãšã£ãŠèå³æ·±ãããããŠæçãªçµéšã ã£ããšç¢ºä¿¡ããŠããŸãã
çµæã®1ã€ã¯ãUnreal Engineã«ç¹å¥ãªãã©ã°ãè¿œå ãããããšã§ãéç解æãUnreal Engineãããžã§ã¯ãã¢ã»ã³ããªã·ã¹ãã ã«ç°¡åã«çµ±åã§ããããã«ãªããŸããã
éµãšãªãã¢ã€ãã¢ã¯ã·ã³ãã«ã§ã-人ã
ã¯ã³ãŒãã®å質ãæ°ã«ããããã«ç°ãªãã¢ãããŒãã䜿çšããŸãããã®1ã€ã¯éçåæã®å°å
¥ã§ããã
éç解æã«é¢ãããžã§ã³ã»ã«ãŒããã¯
ãããªã²ãŒã æ¥çã§æãæåãªéçºè
ã®1人ã§ãããžã§ã³ã«ãŒããã¯ã¯ãããã°ã©ããŒãšããŠã®äž»ãªæ¥çžŸã®1ã€ãšããŠãéç解æææ³ã®ç©æ¥µçãªäœ¿çšããã€ãŠèªèã
ãŠããŸãããåæã ãããªããç¥ã£ãŠãã誰ããéçåæã¯åå¿è
ã®ããã®ããŒã«ã§ãããšæ¬¡åèšã£ããšãã圌ã«ãã®åŒçšãèŠããŠãã ããã ã«ãŒããã¯ã¯ã
察å¿ããèšäºã§éçåæã®ç¥èã説æããŸããããããèªãããšã匷ããå§ãããŸãïŒåæ©ãšäžè¬çãªéçºã®äž¡æ¹ã«ã€ããŠã
ã²ãŒã ããã³ã²ãŒã ãšã³ãžã³ã§éçåæã䜿çšããŠæ€åºããããšã©ãŒ
ãããããéçåæã®å©ç¹ã瀺ãæè¯ã®æ¹æ³ã®1ã€ã¯ããã®æ©èœãå®éã«ç€ºãããšã§ãã ããšãã°ãPVS-StudioããŒã ã¯ãããè¡ãããªãŒãã³ãœãŒã¹ãããžã§ã¯ãããã§ãã¯ããŸãã
誰ã«ãšã£ãŠãã¡ãªããïŒ
- ãããžã§ã¯ãéçºè
ã«ã¯ãšã©ãŒãéç¥ãããä¿®æ£ã§ããŸãã çæ³çã«ã¯ããã¡ãããã¢ãããŒãã¯ãã°/èšäºã«ãããšã©ãŒã®ä¿®æ£ãšã¯ç°ãªãã¹ãã§ãããããžã§ã¯ããèªåã§ãã§ãã¯ããçºè¡ãããèŠåã調ã¹ã䟡å€ããããŸãã ããã¯ãèšäºã®èè
ããããžã§ã¯ãã«ãšã£ãŠéèŠã§ã¯ãªããšã©ãŒãèŠå€±ã£ãããæå³ããã«ãããã«çŠç¹ãåããããããå¯èœæ§ãããå Žåã«ã®ã¿éèŠã§ãã
- ã¢ãã©ã€ã¶ã®éçºè
ã¯ãåæã®çµæã«åºã¥ããŠããŒã«ãæ¹åãããšã©ãŒãæ€åºããã¢ãã©ã€ã¶ã®æ©èœãå®èšŒããããšãã§ããŸãã
- èªè
ã¯ãã©ã®ãšã©ãŒãã¿ãŒã³ãèš±å¯ãããŠãããã確èªããçµéšãç©ãã§ãéçåæã®æ¹æ³ãç解ããŸãã
äžè¬çã«-æå¹æ§ãšå©çã®èšŒæ ã§ã¯ãªããã®ã¯äœã§ããïŒ
éç解æããã§ã«äœ¿çšããŠããã³ãã³ã
誰ããéçºããã»ã¹ã«éçåæãå°å
¥ãããã©ãããèããŠããéãäžéšã®ããŒã ã¯ãã§ã«ããã䜿çšããŠãããå©çãåŸãŠããŸãïŒ ããšãã°ãRocksteadyãEpic GamesãZeniMax MediaãOculusãCodemastersãWargamingãªã©ïŒ
ãœãŒã¹ ïŒã
ãããªã²ãŒã æ¥çã®ããã10ã³ãŒãã®ãã°
ããã¯ããçš®ã®ã¡ã¬ã°ããŒãã«ãªãããããã§ã¯ãªããã²ãŒã ãã²ãŒã ãšã³ãžã³ã§PVS-Studioã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ€åºããããšã©ãŒã§ãããç§ã«ãšã£ãŠæãèå³æ·±ããšæãããããšãããã«èšåãã䟡å€ããããŸãã
ãã€ãã®ããã«ãèå³ãåŒãããã«ããŸãäžèšã®ã³ãŒããã©ã°ã¡ã³ãã®ãšã©ãŒãèªåã§èŠã€ããŠãããã¢ãã©ã€ã¶ãŒã®èŠåãšåé¡ã®èª¬æãèªãããšããå§ãããŸãã
10äœåºå
žïŒ
X-Ray Engineã®ç°åžžãæ¢ã第10äœã¯ãSTALKERã²ãŒã ã§äœ¿çšãããŠããX-Ray Engineã²ãŒã ãšã³ãžã³ã®ãšã©ãŒã§ããã®ã·ãªãŒãºã®ã²ãŒã ããã¬ã€ãã人ã¯ãã²ãŒã ããã»ã¹äžã«çºçããå€ãã®é¢çœãïŒããã§ã¯ãªãïŒãã°ãèŠããŠããã§ãããã ããã¯ç¹ã«STALKERïŒClear Skyã«åœãŠã¯ãŸããŸããClearSkyã¯ãããããªãã§ã¯ãã¬ã€ã§ããŸããã§ããïŒç§ã¯ãã¹ãŠã®ã»ãŒããã殺ããããã°ãä»ã§ãèŠããŠããŸãïŒã ã²ãŒã ãšã³ãžã³ã®åæã瀺ããããã«ãã³ãŒãã«ã¯æ¬åœã«ãã°ããããå€ãã®ãã°ããããŸãã 以äžã¯ãã®1ã€ã§ãã
BOOL CActor::net_Spawn(CSE_Abstract* DC) { .... m_States.empty(); .... }
PVS-StudioèŠå ïŒ
V530é¢æ° 'empty'ã®æ»ãå€ã䜿çšããå¿
èŠããããŸãã
åé¡ã¯ç°¡åã§ã-è¿ãããbooleanã¡ãœãã
emptyã䜿çšãããã³ã³ããã空ãã©ããã瀺ããŸãã äžèšã®åŒã«ã¯ã¡ãœããåŒã³åºã以å€ã«äœãååšããªããšããäºå®ããå€æãããšãéçºè
ã¯ã³ã³ãããŒãã¯ãªã¢ãããã£ãã®ã«ãclearã§ã¯ãªã
空ã®ã¡ãœãããåŒã³åºããŠééãããšæ³å®ã§ããŸãã
ããã¯ãããã10ã«ãšã£ãŠã¯åçŽãããééãã ãšèª°ããèšããããããŸããã ããããããã¯åœŒå¥³ã®é
åã§ãïŒ ãã®ãããåŽé¢ããèŠããšããšã©ãŒã¯éåžžã«åçŽã§æçœã§ããããã«èŠããŸããããã®ãããªãåçŽãªããšã©ãŒã¯ããŸããŸãªãããžã§ã¯ãã§çºçããïŒããã³æ€åºãããïŒããšã¯ãããŸããã
9äœåºå
žïŒ
åŸ
æã®CryEngine Vãã¹ãã²ãŒã ãšã³ãžã³ã®ãšã©ãŒã®ãããã¯ãåŒãç¶ãæããã«ããŸãã 9äœã¯CryEngine Vã®ã³ãŒãã§ãããã®ãšã³ãžã³ã®ã²ãŒã ã§ã¯ãX-Rayãšã³ãžã³ã®ã²ãŒã ã»ã©å€ãã®ãã°ã«æ°ä»ããŸããã§ãããããåæ€ãã«ããããšã³ãžã³ã«å€ãã®äžå¯©ãªã³ãŒããã©ã°ã¡ã³ããå«ãŸããŠããããšãããããŸããã
void CCryDXGLDeviceContext:: OMGetBlendState(...., FLOAT BlendFactor[4], ....) { CCryDXGLBlendState::ToInterface(ppBlendState, m_spBlendState); if ((*ppBlendState) != NULL) (*ppBlendState)->AddRef(); BlendFactor[0] = m_auBlendFactor[0]; BlendFactor[1] = m_auBlendFactor[1]; BlendFactor[2] = m_auBlendFactor[2]; BlendFactor[2] = m_auBlendFactor[3]; *pSampleMask = m_uSampleMask; }
PVS-StudioèŠå ïŒ
V519 ãBlendFactor [2]ãå€æ°ã«ã¯ãé£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã
ç§ãã¡ã®èšäºã§ç¹°ãè¿ãèšåãããŠããããã«ãã¿ã€ããã¹ããå
ãã人ã¯ããŸããã å®éã«ã¯ãéç解æãã³ããŒïŒããŒã¹ãããã³ã¿ã€ããã¹ãæ€åºããåªããä»äºãããããšãç¹°ãè¿ã確èªãããŠããŸãã
m_auBlendFactoré
åãã
BlendFactorã«å€
ãã³ããŒããŸãããã誀ã£ãŠããããå°å°ãã
BlendFactorã 2åæžã蟌ã¿
ãŸãã[2] ã ãã®æ··ä¹±ã®ããã
m_auBlendFactor [3 ]ã®å€ã¯
BlendFactor [2]ã«æžã蟌ãŸããå€ã¯
BlendFactor [3]ã§å€æŽãããŸããã
8äœãœãŒã¹ïŒ
å®å®ã®ãŠãã³ãŒã³ïŒãã¹ããŒã¹ãšã³ãžãã¢ãã®ãœãŒã¹ã³ãŒãã®ç¢ºèªã³ãŒã¹ãå°ãå€æŽããC ++ããCïŒã«ç§»è¡ããŸãã ããã¯ãã¹ããŒã¹ãšã³ãžãã¢ãããžã§ã¯ãã®ã³ãŒãã§ããããã¯ãã¹ããŒã¹æ§é ã®æ§ç¯ãšç¶æã«é¢ãããµã³ãããã¯ã¹ã²ãŒã ã§ãã ç§èªèº«ã¯ã²ãŒã ããã¬ã€ããŸããã§ããããèšäºã®è§£èª¬è
ã®äžäººãèšã£ãããã«ãã
ç§ã¯çµæã«ããŸãé©ããŠããŸãã:) ãã ããŠãç§ã¯æ¬åœã«é¢çœããšã©ãŒãèŠã€ããããšãã§ããŸããã以äžã¯ãã®ãã¡ã®2ã€ã§ãã
public void Init(string cueName) { .... if (m_arcade.Hash == MyStringHash.NullOrEmpty && m_realistic.Hash == MyStringHash.NullOrEmpty) MySandboxGame.Log.WriteLine(string.Format( "Could not find any sound for '{0}'", cueName)); else { if (m_arcade.IsNull) string.Format( "Could not find arcade sound for '{0}'", cueName); if (m_realistic.IsNull) string.Format( "Could not find realistic sound for '{0}'", cueName); } }
PVS-Studioã®èŠå ïŒ
- V3010é¢æ° 'Format'ã®æ»ãå€ã䜿çšããå¿
èŠããããŸãã
- V3010é¢æ° 'Format'ã®æ»ãå€ã䜿çšããå¿
èŠããããŸãã
ã芧ã®ãšãããã¡ãœããã®æ»ãå€ãç¡èŠããéã®ãšã©ãŒã¯ãC ++ã³ãŒãã ãã§ãªããCïŒã§ãèŠã€ãããŸãã
String.Formatã¡ãœããã¯ããã©ãŒãããæååãšãã©ãŒããããããªããžã§ã¯ãã«åºã¥ã
ãŠçµæã®æååã
æ§æããçµæãã¡ãœããã®æ»ãå€ãšããŠè¿ããŸãã äžèšã®ã³ãŒãã§ã¯ã
elseãã©ã³ãã«
string.Formatã® 2ã€ã®åŒã³åºãããããŸããããããã®æ»ãå€ã¯äœ¿çšãããŸããã ã»ãšãã©ã®
å Žå ã
MySandboxGame.Log.WriteLineã¡ãœããã䜿çšãã
ifã¹ããŒãã¡ã³ãã®
then-ãã©ã³ãã§è¡ãããæ¹æ³ãšåæ§ã«ããããã®ã¡ãã»ãŒãžãèªçŽããå¿
èŠããããŸããã
7äœåºå
žïŒ
Quake III Arena GPL Design Reviewéçåæã¯ã¿ã€ããã¹ãããŸãæ€åºããããšãè¿°ã¹ãŸãããïŒ ä»¥äžã®äŸã¯ãããã®å¥ã®ç¢ºèªã§ãã
void Terrain_AddMovePoint(....) { .... x = ( v[ 0 ] - p->origin[ 0 ] ) / p->scale_x; y = ( v[ 1 ] - p->origin[ 1 ] ) / p->scale_x; .... }
PVS-StudioèŠå ïŒ
V537 ãscale_xãã¢ã€ãã ã®äœ¿çšã®æ£ç¢ºãã
確èªããããšãæ€èšããŠãã ããã
å€æ°
xãš
yã«æžã蟌ã¿ãŸãããäž¡æ¹ã®å²ãåœãŠã§åŒ
p-> scale_xãå€ãèšç®ããåŒã§äœ¿çšãããŸãã ããã¯éåžžã«çãããèŠãã2çªç®ã®ã±ãŒã¹ã§ã¯ãåŒ
p-> scale_xã
p-> scale_yã«çœ®ãæããå¿
èŠããããã
ã§ã ã
6äœãœãŒã¹ïŒ
Unity CïŒãœãŒã¹ã³ãŒãã®ç¢ºèªUnity Technologiesã¯æè¿ãç¬èªã®ã²ãŒã ãšã³ãžã³ã§ããUnityã®ãœãŒã¹ã³ãŒããå
¬éããŸããã ç§ãã¡ã¯ãã®ãããªã€ãã³ããéãæããããšãã§ãããåæäžã«å€ãã®èå³æ·±ãå ŽæãèŠã€ããŸããã 以äžã¯ãã®1ã€ã§ãã
public override bool IsValid() { .... return base.IsValid() && (pageSize >= 1 || pageSize <= 1000) && totalFilters <= 10; }
PVS-StudioèŠå ïŒ
V3063è©äŸ¡ãããå Žåãæ¡ä»¶åŒã®äžéšã¯åžžã«trueã§ãïŒpageSize <= 1000ã
pageSizeã®ç¡å¹ãªç¯å²ãã§ãã¯ã
ãããŸãã ã»ãšãã©ã®å Žåã
pageSizeã®å€ã[1;ã®ç¯å²å
ã«ããããšã確èªããäºå®ã§ããã 1000]ã ããããæ®å¿µãªã¿ã€ããã¹ãè¡ãããŸãããæŒç®å '&&'ã®ä»£ããã«ãããã°ã©ããŒã誀ã£ãŠ '||'ãæžããŸããã éšååŒã¯å®éã«ã¯äœããã§ãã¯ããŸããã
5äœãœãŒã¹ïŒ
Unity3DãªãŒãã³ã³ã³ããŒãã³ãã®ãšã©ãŒã®åæé£æ¥ããå Žæã«ã¯ãUnity3Dã³ã³ããŒãã³ãã®èå³æ·±ããã°ããããŸãã ãœãŒã¹èšäºã¯ãUnityãšã³ãžã³ã®ãœãŒã¹ã³ãŒããéããã1幎以äžåã«æžãããŸããã ããã§ããããã§ãé¢çœããã®ãèŠã€ããããšãã§ããŸããã
public static CrawledMemorySnapshot Unpack(....) { .... var result = new CrawledMemorySnapshot { .... staticFields = packedSnapshot.typeDescriptions .Where(t => t.staticFieldBytes != null & t.staticFieldBytes.Length > 0) .Select(t => UnpackStaticFields(t)) .ToArray() .... }; .... }
PVS-StudioèŠå ïŒ
V3080 nullåç
§è§£é€ã®å¯èœæ§ããããŸãã ãt.staticFieldBytesãã®æ€æ»ãæ€èšããŠãã ããã
Whereã¡ãœããã«åŒæ°ãšããŠæž¡ãããã©ã ãåŒã«æ³šç®ããŠãã ããã ã³ãŒãããå€æãããšã
typeDescriptionsã³ã¬ã¯ã·ã§ã³ã«ã¯ã
staticFieldBytesã¡ã³ããŒã
nullã«ãªãå¯èœæ§ã®ããèŠçŽ ãå«ãŸããå Žåããã
ãŸã ã ãã®
ããã Lengthããããã£ã«
ã¢ã¯ã»ã¹ããåã«ã
staticFieldBytesïŒ= Nullã確èªããŸãã æŒç®åã¯æ··ä¹±ããŠããã ãã§ãã&&ãã®ä»£ããã«ãïŒãã䜿çšãããŠããŸãã ããã¯ãå·Šã®åŒã®è©äŸ¡çµæïŒ
true \
false ïŒã«é¢ä¿ãªããå³ã®åŒãè©äŸ¡ãããããšãæå³ããŸãããã®ããã
staticFieldBytes == nullã®å Žåã
Lengthããããã£ã«ã¢ã¯ã»ã¹ãããšãã«
NullReferenceExceptionåã®äŸå€ãã¹ããŒ
ãããŸãã ã&&ãã䜿çšããå Žåã
staticFieldBytes == nullã®å ŽåãåŒã®å³åŽã¯è©äŸ¡ãããªãããããã®ãããªç¶æ³ã¯çºçããŸããã
Unityãããã10ã«2床ã©ã³ã¯ã€ã³ããå¯äžã®ãšã³ãžã³ã§ãããšããäºå®ã«ãããããããããã¯ããã¢ãçŽ æŽãããã²ãŒã ãäœæããã®ãæ¢ããŸããã å«ã-ããã°ããšã®æŠãã«ã€ããŠã
4äœãœãŒã¹ïŒ
Godotãšã³ãžã³ã®ãœãŒã¹ã³ãŒãåææ¬ èœããŠããããŒã¯ãŒãã«é¢é£ããèå³æ·±ããšã©ãŒãããå ŽåããããŸãã äŸïŒäŸå€ãªããžã§ã¯ãã¯äœæãããŸãããéçºè
ã
throwããŒã¯ãŒãã®æå®ãå¿ããŠããããããããªãæ¹æ³ã§ã䜿çšãããŸããã ãã®ãããª
ãšã©ãŒã¯ãCïŒãããžã§ã¯ãããã³
C ++ãããžã§ã¯ãã§
çºçã ãŸã ã æ¬ èœããŠããããŒã¯ãŒãã¯ãGodot Engineã²ãŒã ãšã³ãžã³ã§ãèŠã€ãããŸããã
Variant Variant::get(const Variant& p_index, bool *r_valid) const { .... if (ie.type == InputEvent::ACTION) { if (str =="action") { valid=true; return ie.action.action; } else if (str == "pressed") { valid=true; ie.action.pressed; } } .... }
PVS-Studioã® èŠå ïŒ
V607ææè
ãªãã®è¡šçŸãie.action.pressedãã
äžèšã®ã³ãŒãã¹ããããã§ã¯ã
ie.typeãš
strã®å€ã«å¿ããŠã
Variantåã®ç¹å®ã®å€ãè¿ãããããšã
ããã ãŸã ã äžåºŠã ãããªã¿ãŒã³åŒã¯æ£åžžã«èšè¿°ãããŸãã
-return ie.action.action; ã
returnã¹ããŒãã¡ã³ããå¿ãã2åç®ã®ãããç®çã®å€ã¯è¿ããããã¡ãœããã¯åŒãç¶ãå®è¡ãããŸãã
3äœãœãŒã¹ïŒ
PVS-StudioïŒDoom 3ã³ãŒãã®åæããã§ããããã3ãã«å°éããŸããã ã¯ããŒã ãéããããšã¯ãDoom 3ã²ãŒã ã®ãœãŒã¹ã³ãŒãã®å°ããªæçã§ããäžã§è¿°ã¹ãããã«ããšã©ãŒã¯æšªããèŠããšåçŽã«èŠãããã®ãããªééããã©ã®ããã«è¡ãããæ確ã§ã¯ãªããšããäºå®ã¯ãäœãæå³ããŸãã-å®éã«ã¯ãã©ã®ã¿ã€ãã®ãšã©ãŒãçºçããªãã§ãããã...
void Sys_GetCurrentMemoryStatus( sysMemoryStats_t &stats ) { .... memset( &statex, sizeof( statex ), 0 ); .... }
PVS-StudioèŠå ïŒ
V575 ãmemsetãé¢æ°ã¯ã0ãèŠçŽ ãåŠçããŸãã 3çªç®ã®åŒæ°ã調ã¹ãŸãã
åé¡ãããããç解ããã«ã¯ã
memseté¢æ°ã®ã·ã°ããã£ãæãåºã䟡å€ããããŸãã
void* memset(void* dest, int ch, size_t count);
é¢æ°ã®ã·ã°ããã£ãšãã®åŒã³åºããæ¯èŒãããšãæåŸã®2ã€ã®åŒæ°ãæ··åãããŠããããšãããããŸãã ãã®çµæããªã»ãããå¿
èŠãªäžéšã®ã¡ã¢ãªãããã¯ã¯å€æŽãããŸããã
2äœ2äœã¯ãXenkoã²ãŒã ãšã³ãžã³ã®CïŒã³ãŒãã§èŠã€ãã£ããšã©ãŒã§ãã
åºå
žïŒ
Xenkoã²ãŒã ãšã³ãžã³ã®ãšã©ãŒãæ¢ããŠããŸã private static ImageDescription CreateDescription(TextureDimension dimension, int width, int height, int depth, ....) { .... } public static Image New3D(int width, int height, int depth, ....) { return new Image(CreateDescription(TextureDimension.Texture3D, width, width, depth, mipMapCount, format, 1), dataPointer, 0, null, false); }
PVS-StudioèŠå ïŒ
V3065ãã©ã¡ãŒã¿ãŒ 'height'ã¯ã¡ãœããã®æ¬äœå
ã§ã¯äœ¿çšãããŸããã
CreateDescriptionã¡ãœããã«åŒæ°ãæž¡ãããšã§ãšã©ãŒãçºçããŸããã ãã®ã·ã°ããã£ãèŠããšã2çªç®ã3çªç®ã4çªç®ã®ãã©ã¡ãŒã¿ãŒããããã
width ã
height ã
depthãšåŒã°ããŠããããšãããããŸãã åŒã³åºããããšãåŒæ°
width ã
widthãããã³
depthãæž¡ãããŸãã çãããïŒ ãã®ãããã¢ãã©ã€ã¶ãŒã¯ããã®å ŽæãèŠåãçºããã»ã©çããããšå€æããŸããã
äžäœåºå
žïŒ
åŸ
æã®ã¢ã³ãªã¢ã«ãšã³ãžã³4æ€èšŒUnreal Engineã²ãŒã ãšã³ãžã³ããã®ä»æ¥ã®ãããã10ããšã©ãŒãèŠåºããŸãã ã
2017幎ã®C ++ãããžã§ã¯ãã®ããã10ãšã©ãŒ ãã®èšäºã®å Žåã®ããã«ã以äžã®ãšã©ãŒãèŠããšããæãèå³æ·±ããšã©ãŒã®ãªã¹ããå°ãã®ã¯ã ãããããã«ç解ããŸããã
bool VertInfluencedByActiveBone( FParticleEmitterInstance* Owner, USkeletalMeshComponent* InSkelMeshComponent, int32 InVertexIndex, int32* OutBoneIndex = NULL); void UParticleModuleLocationSkelVertSurface::Spawn(....) { .... int32 BoneIndex1, BoneIndex2, BoneIndex3; BoneIndex1 = BoneIndex2 = BoneIndex3 = INDEX_NONE; if(!VertInfluencedByActiveBone( Owner, SourceComponent, VertIndex[0], &BoneIndex1) && !VertInfluencedByActiveBone( Owner, SourceComponent, VertIndex[1], &BoneIndex2) && !VertInfluencedByActiveBone( Owner, SourceComponent, VertIndex[2]) &BoneIndex3) { .... }
PVS-StudioèŠå ïŒ
V564 ãïŒãæŒç®åã¯ããŒã«åã®å€ã«é©çšãããŸãã æ¬åŒ§ãå«ããã®ãå¿ããŠããããã&&ãæŒç®åã䜿çšããããšãæå³ããŠããå¯èœæ§ããããŸãã
ã¢ãã©ã€ã¶ãŒã®èŠåãšäžèšã®ã³ãŒããæ¯èŒããŠããããã§ã&&ãã®ä»£ããã«ãïŒãã䜿çšããã®ã¯ã©ãã§ããïŒã ãã ãã
VertInfluencedByActiveBoneé¢æ°ã®æåŸã®ãã©ã¡ãŒã¿ãŒã«ããã©ã«ãå€ãããã
ifã¹ããŒãã¡ã³ãã®æ¡ä»¶åŒãç°¡çŽ åããããšã«æ³šæãæããšããã¹ãŠãããæ確ã«ãªããŸãã
if (!foo(....) && !foo(....) && !foo(....) & arg)
æåŸã®éšååŒã«ç¹ã«æ³šæããŠãã ããã
!VertInfluencedByActiveBone(Owner, SourceComponent, VertIndex[2]) &BoneIndex3
ããã©ã«ãå€ãæã€ãã©ã¡ãŒã¿ãŒã¯ããªãã¯ãæŒããŸãã-ããã©ã«ãå€ããªãå Žåããã®ã³ãŒãã¯ã³ã³ãã€ã«ãããŸããã ããããããã§ããããããã¹ãŠãæ£åžžã«ã³ã³ãã€ã«ããããšã©ãŒãåæ§ã«æ£åžžã«ãã¹ã¯ãããŸãã ããã¯çãããå Žæã§ãããã¢ãã©ã€ã¶ãŒã¯æ°ä»ããŸãã-äžçœ®æŒç® 'ïŒ'ãå·Šãªãã©ã³ãã¯
boolåã§ãå³ãªãã©ã³ãã¯
int32ã§ãã
ãããã«
éç解æãã²ãŒã ãã²ãŒã ãšã³ãžã³ã®éçºã«åœ¹ç«ã€ããšããããŠã³ãŒãïŒããã³çµæãšããŠæçµè£œåïŒã®å質ãæ¹åãããšãã質åã«å¯Ÿãããã1ã€ã®çãã§ããããšã瀺ãããšãã§ãããšæããŸãã ãããªã²ãŒã æ¥çã§éçºããŠããå Žåã¯ãéçåæã«ã€ããŠååã«äŒãããã®èšäºã衚瀺ããã ãã§ãã ã©ãããå§ããã¹ããèããŠããŸããïŒ
PVS-Studioããå§ããŸãã
ãã®èšäºãè±èªåã®èŽè¡ãšå
±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒã»ã«ã²ã€ãŽã¡ã·ãªãšãã
ãããªã²ãŒã éçºã®éçåæïŒãœãããŠã§ã¢ãã°ã®ããã10