Big Calculatorã«ã€ããŠã®æ¿ããè°è«ã®åŸãç 究ã«é¢é£ãããããžã§ã¯ãããäœãä»ã®ãã®ããã§ãã¯ãããã£ãã®ã§ãã æåã«çºèŠãããã®ã¯ãã¿ã³ãã¯è³ªè³ªéåæã«é¢é£ãããªãŒãã³ãããžã§ã¯ãã§ããOpenMSã§ãã ãã®ãããžã§ã¯ãã¯ãçå£ãªã¢ãããŒãã§æžãããŠããããšãå€æããŸããã éçºã§ã¯ãå°ãªããšãCppcheckã䜿çšãããŸãã ãããã£ãŠãã»ã³ã»ãŒã·ã§ãã«ãªãã®ã¯äœãåŸ ã€å¿ èŠããããŸããã§ããã ãã ããPpp-StudioãCppcheckã®åŸã«æ€åºã§ãããšã©ãŒã«ã¯é¢å¿ããããŸããã èå³ã®ããæ¹ã¯ããã®èšäºãèªã¿ç¶ããŠãã ããã
OpenMSãããžã§ã¯ãããããŸãã ãªããããå¿ èŠãªã®ããç§ã¯èªåã®èšèã§èšãçŽãããšã¯æããªãã ãŸã æãããå¹ãé£ã°ããã ãŠã£ãããã£ã¢ã®ãŠã§ããµã€ããã説æã®æçãåŒçšããã ãã§ãïŒ
OpenMSã¯ã ã¿ã³ãã¯è³ªè³ªéåæã®ããŒã¿åæããã³åŠçã®ããã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ããã2æ¡é ã®BSDã©ã€ã»ã³ã¹ã®äžã§ãªãªãŒã¹ãããŠããŸãã OpenMSã«ã¯ãããããªãã¯ã¹ã§äœ¿çšãããå€ãã®äžè¬çãªããŒã¿åæãã€ãã©ã€ã³çšã®ããŒã«ããããä¿¡å·åŠçãç¹åŸŽçºèŠïŒéã¢ã€ãœããŒãåãå«ãïŒã1DïŒã¹ãã¯ãã«ãŸãã¯ã¯ãããã°ã©ã ã¬ãã«ïŒã2Dããã³3Dã§ã®èŠèŠåãããããããã³ã°ãããããåå®ã®ã¢ã«ãŽãªãºã ãæäŸããŸãã ã©ãã«ããªãŒããã³åäœäœã©ãã«ããŒã¹ã®å®éåïŒiTRAQãTMTãSILACãªã©ïŒããµããŒãããŠããŸãã ããã«ãã¡ã¿ãããã¯ã¹ã¯ãŒã¯ãããŒãšDIA / SWATHã¿ãŒã²ããåæããµããŒãããŠããŸãã
åºå žïŒãŠã£ãããã£ã¢ã Openms
ãã®ãããžã§ã¯ãã¯äžèŠæš¡ã§ãããéåžžã«è€éã§ãã ãœãŒã¹ã³ãŒãã®ãµã€ãºã¯20ã¡ã¬ãã€ã以äžã§ãã ããã«ãå€æ°ã®ãµãŒãããŒãã£ã©ã€ãã©ãªïŒBoostãQtãZlibãªã©ïŒã ãã®ãããžã§ã¯ãã§ã¯ããã³ãã¬ãŒããéåžžã«ç©æ¥µçã«äœ¿çšããŠããŸãã ãããžã§ã¯ãã®ãœãŒã¹ã³ãŒãã¯SourceForgeããããŠã³ããŒãã§ããŸã ã
OpenMSãããžã§ã¯ãã®éçºæã«ã¯ãéçã³ãŒãåæã䜿çšãããŸãã ãcppcheck.cmakeãã®ååšãšæ¬¡ã®ç²Ÿç¥ã§ã®ã³ã¡ã³ãïŒ
if (i != peptide.size()) // added for cppcheck
å°ãªããšãCppcheckã䜿çšãããããšã瀺ããŸãã CpplintãèšåãããŠããããcpplint.pyããšãããã¡ã€ã«ããããŸãã ããã®ã¢ãããŒãã ããã§ããŸããã
ããã§ã PVS-Studioã¢ãã©ã€ã¶ãŒã䜿çšããŠèŠã€ããããšãã§ãããã®ãèŠãŠã¿ãŸãããã
ã泚æ äœããã®çç±ã§ãC ++ãã¡ã€ã«ã«ã¯æ¡åŒµå* .cãä»ããŠããŸãã ãããã£ãŠãã* .cããã¡ã€ã«ã«ããC ++ã³ãŒãã®äŸãåç §ããŠããæ··ä¹±ããªãã§ãã ããã
1. OpenMPã®æ¬ ç¹
OpenMPãã¯ãããžãŒã䜿çšãããããžã§ã¯ãã«åºäŒãããšã¯ãã£ãã«ãããŸããã äžè¬çã«ãã¢ãã©ã€ã¶ãŒãããããã®èšºæãåé€ããããã«æã èãã蚪ããŸãã ãã®ãããOpenMPã«é¢é£ããèŠåãèŠããšããæ¬åœã«é©ããŸããã éå»1幎éãå€æ°ã®ãããžã§ã¯ãããã§ãã¯ããŠããŸãããããã®ãããã¯ã«é¢ããèŠåã¯äžåºŠãèŠãããšããããŸããã ãããŒã誰ãããŸã ãã®æè¡ã䜿çšããŠããŸãã
çºè¡ãããèŠåã®äžã«ã¯ã誀æ€ç¥ããããŸãããããã®ã±ãŒã¹ã«ãèŠåããããŸããã
DoubleReal ILPDCWrapper::compute(....) const { .... DoubleReal score = 0; .... #pragma omp parallel for schedule(dynamic, 1) for (SignedSize i = 0; i < (SignedSize)bins.size(); ++i) { score += computeSlice_(fm, pairs, bins[i].first, bins[i].second, verbose_level); } return score; }
èŠåPVS-StudioïŒV1205ããŒã¿ã®ç«¶åãªã¹ã¯ã 'score'å€æ°ã䜿çšããä¿è·ãããŠããªãåææäœã ilpdcwrapper.c 213
éé¡ã¯ééã£ãŠãããšèŠãªãããŸãã å€æ° 'score'ã¯ãç°ãªãã¹ã¬ããã§ã®åæ䜿çšããä¿è·ãããŠããŸããã
ä»ã®ã³ã¡ã³ãã¯ããã»ã©éèŠã§ã¯ãããŸãããããŸã 泚æãã䟡å€ããããŸãã 䞊åã»ã¯ã·ã§ã³å ã§ã¯ããã¹ãŠã®äŸå€ããã£ããããå¿ èŠããããŸãã 䞊åã»ã¯ã·ã§ã³ã®å¶éãè¶ ãããšãããã°ã©ã ãç°åžžçµäºããå¯èœæ§ããããŸãã ãã®ãããã¯ã®è©³çŽ°ã«ã€ããŠã¯ãã OpenMPãšäŸå€ ããã 䞊åã»ã¯ã·ã§ã³å ã®äŸå€ã®åŠç ããåç §ããŠãã ããã
throwã¹ããŒãã¡ã³ãã䜿çšããŠãäŸå€ãæ瀺çã«ã¹ããŒã§ããŸãã newæŒç®åïŒstd :: bad_allocïŒãåŒã³åºããšãã«ãçºçããå¯èœæ§ããããŸãã
æåã®ãªãã·ã§ã³ã getTheoreticalmaxPositionïŒïŒé¢æ°ã¯äŸå€ãã¹ããŒããå ŽåããããŸãã
Size getTheoreticalmaxPosition() const { if (!this->size()) { throw Exception::Precondition(__FILE__, __LINE__, __PRETTY_FUNCTION__, "There must be at least one trace to ......"); } .... } virtual void run() { .... #pragma omp parallel for for (SignedSize i = 0; i < (SignedSize)seeds.size(); ++i) { .... f.setMZ( traces[traces.getTheoreticalmaxPosition()].getAvgMZ()); .... } .... }
PVS-StudioèŠåïŒV1301 'throw'ããŒã¯ãŒãã¯ã䞊åã»ã¯ã·ã§ã³ã®try..catchãããã¯ã®å€éšã§ã¯äœ¿çšã§ããŸããã featurefinderalgorithmpickedhelperstructs.h 199
2çªç®ã®ãªãã·ã§ã³ã ãnewãæŒç®åãåŒã³åºããšãäŸå€ãçºçããå ŽåããããŸãã
TraceFitter<PeakType>* chooseTraceFitter_(double& tau) { // choose fitter if (param_.getValue("feature:rt_shape") == "asymmetric") { LOG_DEBUG << "use asymmetric rt peak shape" << std::endl; tau = -1.0; return new EGHTraceFitter<PeakType>(); } .... } virtual void run() { .... #pragma omp parallel for for (SignedSize i = 0; i < (SignedSize)seeds.size(); ++i) { .... TraceFitter<PeakType>* fitter = chooseTraceFitter_(egh_tau); .... } .... }
PVS-StudioèŠåïŒV1302 'new'æŒç®åã¯ã䞊åã»ã¯ã·ã§ã³ã®try..catchãããã¯ã®å€éšã§ã¯äœ¿çšã§ããŸããã featurefinderalgorithmpicked.h 1926
ä»ã®åæ§ã®èŠåïŒ
- V1301 featurefinderalgorithmpicked.h 1261
- V1301 mzmlfile.h 114
- V1301 rawmssignalsimulation.c 598
- V1301 rawmssignalsimulation.c 1152
- V1301 chromatogramextractor.h 103
- V1301 chromatogramextractor.h 118
- V1302 featurefinderalgorithmpicked.h 1931
- V1302 rawmssignalsimulation.c 592
- V1302 rawmssignalsimulation.c 601
- V1302 openswathanalyzer.c 246
2.ã¿ã€ããã¹
std::vector< std::pair<std::string, long> > spectra_offsets; std::vector< std::pair<std::string, long> > chromatograms_offsets; template <typename MapType> void MzMLHandler<MapType>::writeFooter_(std::ostream& os) { .... int indexlists; if (spectra_offsets.empty() && spectra_offsets.empty() ) { indexlists = 0; } else if (!spectra_offsets.empty() && !spectra_offsets.empty() ) { indexlists = 2; } else { indexlists = 1; } .... }
PVS-Studioã®èŠåïŒ
V501ã&&ãæŒç®åã®å·ŠåŽãšå³åŽã«ã¯ãåäžã®ãµãåŒãspectra_offsets.emptyïŒïŒãããããŸãã mzmlhandler.h 5288
V501ã&&ãæŒç®åã®å·Šå³ã«ã¯ãåäžã®å¯æ¬¡åŒãïŒSpectra_offsets.emptyïŒïŒãããããŸãã mzmlhandler.h 5292
éåžžã«å¥åŠãªãã§ãã¯ã ã³ã³ãããspectra_offsetsãã¯2åãã§ãã¯ãããŸãã ã»ãšãã©ã®å Žåãããã¯ã¿ã€ããã¹ã§ããã2ã€ã®ç°ãªãã³ã³ããïŒspectrum_offsetsããã³chromatograms_offsetsïŒããã§ãã¯ããå¿ èŠããããŸãã
template <typename MapType> void MzMLHandler<MapType>::characters( const XMLCh* const chars, const XMLSize_t) { .... if (optionalAttributeAsString_(data_processing_ref, attributes, s_data_processing_ref)) { data_.back().meta.setDataProcessing( processing_[data_processing_ref]); } else { data_.back().meta.setDataProcessing( processing_[data_processing_ref]); } .... }
PVS-StudioèŠåïŒV523ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã mzmlhandler.h 534
åæ§ã®ã³ãŒããã©ã°ã¡ã³ããèŠããšã以äžã䜿çšããå¿ èŠããããšçµè«ä»ããããšãã§ããŸãã
- processing_ [data_processing_ref]
- processing_ [default_processing_]
å€ãã®ã¿ã€ããã¹ã¯ãäŸå€ã®çæã«é¢é£ããŠããããšãå€æããŸããã ééãã¯ãããµããŠããŸãã ãã¹ããŒãããŒã¯ãŒãã¯å¿ããããŠããŸãã äžæãªããžã§ã¯ãã¯ããã ã¡ã«äœæããã³ç Žæ£ãããã ãã§ãã ãã®ãããªãšã©ãŒã®äŸïŒ
inline UInt asUInt_(const String & in) { UInt res = 0; try { Int tmp = in.toInt(); if (tmp < 0) { Exception::ConversionError( __FILE__, __LINE__, __PRETTY_FUNCTION__, ""); } res = UInt(tmp); } catch (Exception::ConversionError) { error(LOAD, String("UInt conversion error of \"") + in + "\""); } return res; }
PVS-StudioèŠåïŒV596ãªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŠããŸããã ãthrowãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãïŒthrow ConversionErrorïŒFOOïŒ; xmlhandler.h 247
ããã«åãã¿ã€ããã¹ïŒ
- lusionexclusionlist.c 281
- lusionexclusionlist.c 285
- precursionselectionpreprocessing.c 257
- modificationdb.c 419
- modificationdb.c 442
- svmtheoreticalspectrumgeneratorset.c 103
- logconfighandler.c 285
- logconfighandler.c 315
- suffixarraytrypticcompressed.c 488
- tooldescription.c 147
- tofcalibration.c 147
ãããŠãç§ãæ°ã¥ããæåŸã®ã¿ã€ããã¹ïŒ
inline typename Value<Pipe>::Type const & operator*() { tmp.i1 = *in.in1; tmp.i2 = *in.in2; tmp.i3 = *in.in2; return tmp; }
èŠåPVS-StudioïŒV525åæ§ã®ãããã¯ã®ã³ã¬ã¯ã·ã§ã³ãå«ãã³ãŒãã 112è¡ç®ã113è¡ç®ã114è¡ç®ã®é ç®ãin1ãããin2ãããin2ãã確èªããŸããpipe_joiner.h 112
ããã¯æžãããã¹ãã§ãïŒ
tmp.i1 = *in.in1; tmp.i2 = *in.in2; tmp.i3 = *in.in3;
3.å¥åŠãªç¶æ
CompressedInputSource::CompressedInputSource( const String & file_path, const char * header, MemoryManager * const manager) : xercesc::InputSource(manager) { if (sizeof(header) / sizeof(char) > 1) { head_[0] = header[0]; head_[1] = header[1]; } else { head_[0] = '\0'; head_[1] = '\0'; } .... }
PVS-StudioèŠåïŒV514ãã€ã³ã¿ãŒã®ãµã€ãº 'sizeofïŒheaderïŒ'ãå¥ã®å€ã§é€ç®ããŸãã è«çãšã©ãŒãååšããå¯èœæ§ããããŸãã compressedinputsource.c 52
ãã€ã³ã¿ãŒã®ãµã€ãºããã€ãã®ãµã€ãºã§å²ããšãåžžã«1ãã倧ããå€ãåŸãããŸãã å°ãªããšããç§ã¯ãããã©ãã«ãªã掟æãªã¢ãŒããã¯ãã£ãç¥ããŸããã ã ããããã«ããçš®ã®ééãããããŸãã
åæ§ã®å¥åŠãªãã§ãã¯ã¯ãcompressedinputsource.c 104ããå ¥æã§ããŸãã
4.ããŒã«ã«ãªããžã§ã¯ããžã®ãªã³ã¯ãè¿ã
template <typename TStringSet, typename TSpec> inline Iter<TStringSet, ConcatVirtual<TSpec> > const & operator++(Iter<TStringSet, ConcatVirtual<TSpec> > & me, int) { Iter<TStringSet, ConcatVirtual<TSpec> > before = me; goNext(me); return before; }
PVS-StudioèŠåïŒV558é¢æ°ã¯ãäžæããŒã«ã«ãªããžã§ã¯ããžã®åç §ãè¿ããŸãïŒbeforeã iter_concat_virtual.h 277
ãã®é¢æ°ã¯ãäžæå€æ°ãbeforeããžã®åç §ãè¿ããŸãã é¢æ°ãçµäºãããšããã®å€æ°ã¯ç Žæ£ãããŸãã ç Žå£ããããªããžã§ã¯ããžã®åç §ã䜿çšãããšãäºæž¬ã§ããªãçµæã«ã€ãªãããŸãã
æ°ããã€ãã¬ãŒã¿ãäœæããå¿ èŠã¯ãªãããã§ããããªã³ã¯ãä¿åããå¿ èŠããããŸãïŒ
Iter<TStringSet, ConcatVirtual<TSpec> > &before = me;
[PSééã£ãŠããŸãã ã³ã¡ã³ããåç §ããŠãã ããã]
æŒç®å '-'ã«ãåæ§ã®åé¡ããããŸãïŒiter_concat_virtual.h 310
5.ããããªã³ã³ãã¥ãŒãã£ã³ã°
typedef size_t Size; typedef double DoubleReal; void updateMeanEstimate(const DoubleReal & x_t, DoubleReal & mean_t, Size t) { DoubleReal tmp(mean_t); tmp = mean_t + (1 / (t + 1)) * (x_t - mean_t); mean_t = tmp; }
PVS-StudioèŠåïŒV636ã1 /ïŒt + 1ïŒãåŒã¯ãæé»çã«ãintãåãããdoubleãåã«ãã£ã¹ããããŸããã åæ°éšåã®æ倱ãé¿ããããã«ãæ瀺çãªåãã£ã¹ãã®äœ¿çšãæ€èšããŠãã ããã äŸïŒdouble A =ïŒdoubleïŒïŒXïŒ/ Y;ã masstracedetection.c 129
åŒãïŒ1 /ïŒt + 1ïŒïŒãã¯åžžã«ãŒããŸãã¯1ã§ãã ããã¯ããã®åŒãæŽæ°ã§ããããã§ãã ããããããŸã£ããå¥ã®çµæãåŸããããšèããããŠããã®ãããããŸããã ããã°ã©ã ã®ããžãã¯ã¯ããããŸãããã次ã®ããšã念é ã«çœ®ããŠããããã§ãã
tmp = mean_t + (1.0 / (t + 1)) * (x_t - mean_t);
ãŸããM_PIå®æ°ã®ä»£ããã«ãæ瀺çãªå€ã䜿çšãããŠãããããŸãæ£ç¢ºã§ã¯ãªãããšãæ°ã«å ¥ããªãã£ãã ããã¯ééãã§ã¯ãããŸããããããŸãè¯ããããŸããã äŸïŒ
bool PosteriorErrorProbabilityModel::fit( std::vector<double> & search_engine_scores) { .... incorrectly_assigned_fit_param_.A = 1 / sqrt(2 * 3.14159 * pow(incorrectly_assigned_fit_param_.sigma, 2)); .... }
èŠåPVS-StudioïŒV624å®æ°3.14159ã䜿çšãããŠããŸãã çµæã®å€ã¯äžæ£ç¢ºã«ãªãå¯èœæ§ããããŸãã <math.h>ã®M_PIå®æ°ã®äœ¿çšãæ€èšããŠãã ããã posteriorerrorprobabilitymodel.c 92
åæ§ã«ïŒ
- posteriorerrorprobabilitymodel.c 101
- posteriorerrorprobabilitymodel.c 110
- posteriorerrorprobabilitymodel.c 155
- posteriorerrorprobabilitymodel.c 162
6.ã¢ã¬ã€ãæµ·å€ã«è¡ã
static const Int CHANNELS_FOURPLEX[4][1]; static const Int CHANNELS_EIGHTPLEX[8][1]; ExitCodes main_(int, const char **) { .... if (itraq_type == ItraqQuantifier::FOURPLEX) { for (Size i = 0; i < 4; ++i) { std::vector<std::pair<String, DoubleReal> > one_label; one_label.push_back(std::make_pair<String, DoubleReal>( String("Channel ") + String(ItraqConstants::CHANNELS_FOURPLEX[i][0]), DoubleReal(ItraqConstants::CHANNELS_FOURPLEX[i][0]))); labels.push_back(one_label); } } else //ItraqQuantifier::EIGHTPLEX { for (Size i = 0; i < 8; ++i) { std::vector<std::pair<String, DoubleReal> > one_label; one_label.push_back(std::make_pair<String, DoubleReal>( String("Channel ") + String(ItraqConstants::CHANNELS_FOURPLEX[i][0]), DoubleReal(ItraqConstants::CHANNELS_FOURPLEX[i][0]))); labels.push_back(one_label); } } .... }
PVS-StudioèŠåïŒV557ã¢ã¬ã€ããªãŒããŒã©ã³ããå¯èœæ§ããããŸãã ãiãã€ã³ããã¯ã¹ã®å€ã¯7ã«éããå¯èœæ§ããããŸããitraqanalyzer.c 232
å®éããã®ãšã©ãŒã¯ã³ããŒããŒã¹ããšã©ãŒã«èµ·å ããå¯èœæ§ããããŸãã ãããããé åã®å¢çãè¶ããåºå£ãããããšããŸãã ããã¯ãã£ãšæãã§ããã ãšã«ããããã®åºåã¯éåžžã«arbitraryæçã§ãã åããšã©ãŒãããŸããŸãªæ¹æ³ã§åé¡ã§ããŸãã
ããã§ããelseããã©ã³ãã§ã¯ããCHANNELS_EIGHTPLEXãã®é åãæäœããå¿ èŠããããŸããã ããã¯ã³ã¡ã³ãã«ãã£ãŠèšŒæãããŸãïŒ
else //ItraqQuantifier::EIGHTPLEX
ãã ããã³ããŒããã³ãŒããã©ã°ã¡ã³ãã¯å®å šã«ã¯å€æŽãããŠããŸããã ãã®çµæãããå°ããªé åCHANNELS_FOURPLEXãããã§äœ¿çšãããŸãã
ããã§åæ§ã®ãšã©ãŒïŒå¥ã®ã³ããŒããŒã¹ãïŒïŒtmtanalyzer.c 225
å¥ã®äŸãèããŠã¿ãŸãããã
DoubleReal masse_[255]; ///< mass table EdwardsLippertIterator::EdwardsLippertIterator(const EdwardsLippertIterator & source) : PepIterator(source), f_file_(source.f_file_), actual_pep_(source.actual_pep_), spec_(source.spec_), tol_(source.tol_), is_at_end_(source.is_at_end_), f_iterator_(source.f_iterator_), f_entry_(source.f_entry_), b_(source.b_), e_(source.e_), m_(source.m_), massMax_(source.massMax_) { for (Size i = 0; i < 256; i++) { masse_[i] = source.masse_[i]; } }
PVS-StudioèŠåïŒV557ã¢ã¬ã€ããªãŒããŒã©ã³ããå¯èœæ§ããããŸãã ãiãã€ã³ããã¯ã¹ã®å€ã¯255ã«éããå¯èœæ§ããããŸããedwardslippertiterator.c 134
ã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãmasse_é åã§ã¯æ£ããæ©èœããŸããã 255åã®èŠçŽ ã§æ§æãããŸãã ãããŠã256åã®èŠçŽ ãã³ããŒãããŸãã
æ£ãããµã€ã¯ã«ïŒ
for (Size i = 0; i < 255; i++) { masse_[i] = source.masse_[i]; }
ããã«è¯ãã®ã¯ãéæ³ã®å®æ°ããŸã£ãã䜿çšããªãããšã§ãã
7.éæšå¥šã®ãªãã¬ãŒã¿ãŒåŒã³åºããnewã
svm_problem * LibSVMEncoder::encodeLibSVMProblem(....) { .... node_vectors = new svm_node *[problem->l]; if (node_vectors == NULL) { delete[] problem->y; delete problem; return NULL; } .... }
PVS-Studioã®èŠåïŒV668ã¡ã¢ãªã¯ãæ°ãããæŒç®åã䜿çšããŠå²ãåœãŠãããããããnode_vectorsããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã libsvmencoder.c 177
ãifïŒnode_vectors == NULLïŒãããã§ãã¯ããŠãæå³ããããŸããã ã¡ã¢ãªãå²ãåœãŠãããšãã§ããªãå ŽåãäŸå€ãã¹ããŒãããŸãã ãã®çµæãããã°ã©ã ã¯ããã°ã©ããèšç»ãããšããã«åäœããŸããã ããšãã°ãã¡ã¢ãªãªãŒã¯ãçºçããŸãã
åæ§ã®å»æ¢ããããã§ãã¯ïŒ
- file_page.h 728
- libsvmencoder.c 160
ãããã«
CppcheckãCpplintã ãã§ãªããPVS-Studioã䜿çšãããšäŸ¿å©ã ãšæããŸãã ç¹ã«å®æçã«è¡ãå Žåã ãããžã§ã¯ãã®éçºè ã«support@viva64.comå®ãŠã«ãé£çµ¡ãã ãã ã ãã°ããã®éããã詳现ãªOpenMSãã¹ãçšã®ããŒãå²ãåœãŠãŸãã