ã¯ããã«
Computational Network Toolkit ïŒCNTKïŒ-ãã¿ãŒã³èªèãé³å£°ç解ãããã¹ãåæãªã©ã«äœ¿çšã§ããããŸããŸãªã¿ã€ãã®ãããã¯ãŒã¯ãèšèšããã³ãã¬ãŒãã³ã°ããããã®ããŒã«ã®ã»ããã
PVS-Studioã¯ãCãC ++ãCïŒã§èšè¿°ãããããã°ã©ã ã®ãœãŒã¹ã³ãŒãã®ãšã©ãŒãæ€åºããããã®éçã¢ãã©ã€ã¶ãŒã§ãã PVS-StudioããŒã«ã¯ãææ°ã®ã¢ããªã±ãŒã·ã§ã³ã®éçºè åãã§ãããVisual Studio 2010-2015ç°å¢ã«çµ±åãããŸãã
次ã®éããŠãããããžã§ã¯ãã®ãã§ãã¯ã«é¢ããèšäºãæºåããéã«ãéçã¢ãã©ã€ã¶ãŒãæäŸãããã¹ãŠã®èŠåã«é¢ããæ å ±ã決ããŠæäŸããŸããã ãããã£ãŠããããžã§ã¯ãã®äœæè ãç¬èªã«åæãå®è¡ããã¢ãã©ã€ã¶ãŒã«ãã£ãŠçºè¡ããããã¹ãŠã®ã¡ãã»ãŒãžã調æ»ããããšããå§ãããŸãã ãã°ããã®éããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®éçºè ãžã®éµãæäŸããŸãã
ãšã©ãŒã¯ã»ãšãã©ãªãã£ããšèšããããåŸãŸããã ãããŠãããã¯äºæ³ãããããšã§ãã ãã€ã¯ããœããã®è£œåã³ãŒãã¯éåžžã«é«å質ã§ããããã§ã«äœåºŠããããèŠãŠããŸãããå瀟ãåŸã ã«ãªãŒãã³ããŠãããããžã§ã¯ãããã§ãã¯ããŠããŸãã ãã ããéçåæã®æå³ã¯ãå®æçãªãã§ãã¯ã§ããã1åéãã®ããã£ããªãŒã¬ã€ããã§ã¯ãªãããšãå¿ããªãã§ãã ãã ã
ãããã¿ã€ããã¹
ã¿ã€ããã¹ã¯ã¿ã€ãã³ã°æã®äžå¿«ãªäºæ ã§ãã 圌ãã¯ãœãŒã·ã£ã«ãããã¯ãŒã¯ãæ¬ããªã³ã©ã€ã³åºçç©ãããã«ã¯ãã¬ãã«ãŸã§äŸµå ¥ããŸããã ãã¬ãŒã³ããã¹ãã§ã¯ãããã¹ããšãã£ã¿ãŒã§ã®ã¹ãã«ãã§ãã¯ã圹ç«ã¡ãŸããããã°ã©ãã³ã°ã§ã¯ããœãŒã¹ã³ãŒãã®éçåæãããã«é©ããŠããŸãã
V501 '||'ã®å·Šãšå³ã«åäžã®å¯æ¬¡åŒ 'ïŒå ¥åïŒ0ïŒ-> HasMBLayoutïŒïŒ'ããããŸãã æŒç®åã trainingnodes.h 1416
virtual void Validate(bool isFinalValidationPass) override { .... if (isFinalValidationPass && !(Input(0)->GetSampleMatrixNumRows() == Input(2)->GetSampleMatrixNumRows() && (Input(0)->GetMBLayout() == Input(2)->GetMBLayout() || !Input(0)->HasMBLayout() || // <= !Input(0)->HasMBLayout()))) // <= { LogicError(..., NodeName().c_str(),OperationName().c_str()); } .... }
ãã®ãã©ã°ã¡ã³ãã®ãã©ãŒãããã¯ãæ確ã«ããããã«å€§ããå€æŽãããŠããŸãã ãã®åŸã«ãªã£ãŠãæ¡ä»¶ã«2ã€ã®åäžã®ãã§ãã¯ãïŒInputïŒ0ïŒ-> HasMBLayoutïŒïŒããå«ãŸããããšãæããã«ãªããŸããã ãããããããã±ãŒã¹ã§ã¯ãã€ã³ããã¯ã¹ã2ãã®èŠçŽ ã䜿çšããããšèããŠããŸããã
V501 ã-ãæŒç®åã®å·Šå³ã«åãå¯æ¬¡åŒããããŸããi0-i0 ssematrix.h 564
void assignpatch(const ssematrixbase &patch, const size_t i0, const size_t i1, const size_t j0, const size_t j1) { .... for (size_t j = j0; j < j1; j++) { const float *pcol = &patch(i0 - i0, j - j0); // <= float *qcol = &us(i0, j); const size_t colbytes = (i1 - i0) * sizeof(*pcol); memcpy(qcol, pcol, colbytes); } .... }
ã·ã°ãããã®ãããåŒãi0-i0ãã¯åžžã«ãŒãã§ãã ããããã圌ãã¯ãi1-i0ããŸãã¯ãj-i1ãããŸãã¯äœãä»ã®ãã®ãæžãããã£ãã®ã§ãããã éçºè ã¯ãã®å Žæã確èªããå¿ èŠããããŸãã
V596ãªããžã§ã¯ãã¯äœæãããŸãããã䜿çšãããŠããŸããã ãthrowãããŒã¯ãŒããæ¬ èœããŠããå¯èœæ§ããããŸãïŒthrow runtime_errorïŒFOOïŒ; simplenetworkbuilder.cpp 1578
template <class ElemType> ComputationNetworkPtr SimpleNetworkBuilder<ElemType>:: BuildNetworkFromDbnFile(const std::wstring& dbnModelFileName) { .... if (this->m_outputLayerSize >= 0) outputLayerSize = this->m_outputLayerSize; else if (m_layerSizes.size() > 0) m_layerSizes[m_layerSizes.size() - 1]; else std::runtime_error("Output layer size must be..."); // <= .... }
ãšã©ãŒã¯ããthrowãããŒã¯ãŒãã誀ã£ãŠå¿ããããããšã§ãã ãã®çµæããã®ã³ãŒãã¯ãšã©ãŒã®å Žåã«äŸå€ãã¹ããŒããŸããã ã³ãŒãã®ä¿®æ£ããŒãžã§ã³ïŒ
.... else throw std::runtime_error("Output layer size must be..."); ....
ãã¡ã€ã«ãæäœãã
V739 EOFã¯ããcharãã¿ã€ãã®å€ãšæ¯èŒããªãã§ãã ããã ãcãã¯ãintãã¿ã€ãã§ãªããã°ãªããŸããã fileutil.cpp 852
string fgetstring(FILE* f) { string res; for (;;) { char c = (char) fgetc(f); // <= if (c == EOF) // <= RuntimeError("error reading .... 0: %s", strerror(errno)); if (c == 0) break; res.push_back(c); } return res; }
ã¢ãã©ã€ã¶ãŒã¯ãEOFå®æ°ã 'char'åã®å€æ°ãšæ¯èŒãããããšãæ€åºããŸããã ããã¯ãäžéšã®æåãããã°ã©ã ã«ãã£ãŠæ£ããåŠçãããªãããšã瀺ããŠããŸãã
EOFã®å®£èšæ¹æ³ãæ€èšããŠãã ããã
#define EOF (-1)
ã芧ã®ãšãããEOF㯠'int'åã® '-1'ã«ãããŸããã fgetcïŒïŒé¢æ°ã¯ãã¿ã€ã 'int'ã®å€ãè¿ããŸãã ã€ãŸãã0ã255ãŸãã¯-1ïŒEOFïŒã®æ°å€ãè¿ãããšãã§ããŸãã èªã¿åãããå€ã¯ãã¿ã€ããcharãã®å€æ°ã«å ¥ããããŸãã ãã®ãããå€ã0xFFïŒ255ïŒã®æåã¯-1ã«ãªãããã¡ã€ã«ã®çµããïŒEOFïŒã®ããã«è§£éãããŸãã
æ¡åŒµASCIIã³ãŒãã䜿çšããŠãããŠãŒã¶ãŒã¯ãã¢ã«ãã¡ãããã®æåã®1ã€ãããã°ã©ã ã«ãã£ãŠèª€ã£ãŠåŠçããããšããšã©ãŒãçºçããå ŽåããããŸãã
ããšãã°ã Windows-1251ãšã³ã³ãŒãã£ã³ã°ã®ãã·ã¢èªã®ã¢ã«ãã¡ãããã®æåŸã®æåã¯ãã³ãŒã0xFFã®ã¿ãæã¡ãããã°ã©ã ã«ãã£ãŠãã¡ã€ã«ã®çµããã®ã·ã³ãã«ãšããŠèªèãããŸãã
ä¿®æ£ãããã³ãŒãã¹ããããïŒ
int c = fgetc(f); if (c == EOF) RuntimeError(....);
V547åŒ 'val [0] == 0xEF'ã¯åžžã«falseã§ãã charåã®å€ã®ç¯å²ïŒ[-128ã127]ã file.cpp 462
bool File::IsUnicodeBOM(bool skip) { .... else if (m_options & fileOptionsText) { char val[3]; file.ReadString(val, 3); found = (val[0] == 0xEF && val[1] == 0xBB && val[2] == 0xBF); } // restore pointer if no BOM or we aren't skipping it if (!found || !skip) { SetPosition(pos); } .... }
ããã©ã«ãã§ã¯ãã¿ã€ããcharãã®å€ã®ç¯å²ã¯[-127; 127]ã§ãã ã³ã³ãã€ã«ãã©ã°/ Jã䜿çšãããšãç¯å²[0; 255]ã䜿çšããããã³ã³ãã€ã©ãŒã«æ瀺ã§ããŸãã ãã ãããã®ãœãŒã¹ãã¡ã€ã«ã«ã¯ãã®ãããªãã©ã°ãæå®ãããŠããªãããããã®ãããªã³ãŒãã¯ãã¡ã€ã«ã«BOMãå«ãŸããŠãããšå€æããããšã¯ãããŸããã
ã¡ã¢ãªãæäœãã
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããm_rowIndicesããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªïŒ171ã175ãlibsvmbinaryreader.cpp 171
template <class ElemType> void SparseBinaryMatrix<ElemType>::ResizeArrays(size_t newNNz) { .... if (m_nnz > 0) { memcpy(rowIndices, m_rowIndices, sizeof(int32_t)....); // <= memcpy(values, this->m_values, sizeof(ElemType)....); // <= } if (m_rowIndices != nullptr) { // free(m_rowIndices); CUDAPageLockedMemAllocator::Free(this->m_rowIndices, ....); } if (this->m_values != nullptr) { // free(this->m_values); CUDAPageLockedMemAllocator::Free(this->m_values, ....); } .... }
ã¢ãã©ã€ã¶ãŒã¯ãnullãã€ã³ã¿ãŒã®éåç §ã®å¯èœæ§ãæ€åºããŸããã ã³ãŒãã«ãã€ã³ã¿ãŒãšãŒãã®æ¯èŒãå«ãŸããŠããããã³ãŒãå ã§ãã®ãã€ã³ã¿ãŒãæ€èšŒãªãã§äœ¿çšãããå Žåããã®ãããªã³ãŒãã¯çãããå±éºã§ãã
memcpyïŒïŒé¢æ°ã¯ãã¢ãã¬ã¹ 'm_rowIndices'ããã³ 'm_values'ã«ãããã€ããã³ããŒããŸããããããã®ãã€ã³ã¿ãŒãéåç §ããŸããäžèšã®ã³ãŒãäŸã§ã¯ãæœåšçã«nullã«ãªãå¯èœæ§ããããŸãã
V510 'sprintf_s'é¢æ°ã¯ã3çªç®ã®å®åŒæ°ãšããŠã¯ã©ã¹åå€æ°ãåãåãããšãæåŸ ãããŠããŸããã binaryfile.cpp 501
const std::wstring& GetName() { return m_name; } Section* Section::ReadSection(....) { .... char message[256]; sprintf_s(message,"Invalid header in file %ls, in header %s\n", m_file->GetName(), section->GetName()); // <= RuntimeError(message); .... }
sprint_sïŒïŒé¢æ°ã®å®éã®ãã©ã¡ãŒã¿ãŒã¯ãPODã¿ã€ãã®ã¿ã§ãã PODã¯ãPlain Old Dataãã®ç¥èªã§ããSimple C-style DataããšããŠç¿»èš³ã§ããŸãã
ãStd :: wstringãã¯PODã¿ã€ãã«ã¯é©çšãããŸããã æååãžã®ãã€ã³ã¿ã®ä»£ããã«ããªããžã§ã¯ãã®ã³ã³ãã³ããã¹ã¿ãã¯ã«é 眮ãããŸãã ãã®ãããªã³ãŒãã¯ããããã¡å ã®ãæå³äžæãã®åœ¢æããŸãã¯ããã°ã©ã ã®ç°åžžçµäºã«ã€ãªãããŸãã
ä¿®æ£ããããªãã·ã§ã³ïŒ
sprintf_s(message,"Invalid header in file %ls, in header %s\n", m_file->GetName().c_str(), section->GetName().c_str());
V630 ãmallocãé¢æ°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå«ãã¯ã©ã¹ã§ãããªããžã§ã¯ãã®é åã«ã¡ã¢ãªãå²ãåœãŠãããã«äœ¿çšãããŸãã ã©ãã£ã¹ãã©ã¯ãŒãããã¯ã¯ãŒã.cpp 912
void lattice::forwardbackwardalign() { .... aligninfo *refinfo; unsigned short *refalign; refinfo = (aligninfo *) malloc(sizeof(aligninfo) * 1); // <= refalign = (unsigned short *) malloc(sizeof(....) * framenum); array_ref<aligninfo> refunits(refinfo, 1); array_ref<unsigned short> refedgealignmentsj(....); .... }
ãã®ã³ãŒããã©ã°ã¡ã³ãã§ã¯ããaligninfoãã¿ã€ãã®æ§é ã«å¯Ÿããåçã¡ã¢ãªã®èª€ã£ãå²ãåœãŠãèŠã€ãããŸããã å®éãæ§é äœã®å®çŸ©ã«ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒãããããã®ã¡ã¢ãªå²ãåœãŠæ¹æ³ã§ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã¯åŒã³åºãããŸããã freeïŒïŒé¢æ°ã䜿çšããŠã¡ã¢ãªã解æŸããå Žåããã¹ãã©ã¯ã¿ãåŒã³åºãããŸããã
以äžã¯ããaligninfoãã¿ã€ãã®èšè¿°ã³ãŒãã§ãã
struct aligninfo // phonetic alignment { unsigned int unit : 19; // triphone index unsigned int frames : 11; // duration in frames unsigned int unused : 1; // (for future use) unsigned int last : 1; // set for last entry aligninfo(size_t punit, size_t pframes) : unit((unsigned int) punit), frames((unsigned int) pframes), unused(0), last(0) { checkoverflow(unit, punit, "aligninfo::unit"); checkoverflow(frames, pframes, "aligninfo::frames"); } aligninfo() // [v-hansu] initialize to impossible values { #ifdef INITIAL_STRANGE unit = unsigned int(-1); frames = unsigned int(-1); unused = unsigned int(-1); last = unsigned int(-1); #endif } template <class IDMAP> void updateunit(const IDMAP& idmap /*[unit] -> new unit*/) { const size_t mappedunit = idmap[unit]; unit = (unsigned int) mappedunit; checkoverflow(unit, mappedunit, "aligninfo::unit"); } };
ä¿®æ£ããããªãã·ã§ã³ïŒ
aligninfo *refinfo = new aligninfo();
ãããŠãã¡ãããã¡ã¢ãªã解æŸããã«ã¯ãæŒç®åãdeleteããåŒã³åºãå¿ èŠããããŸãã
V599 ãIDataWriterãã¯ã©ã¹ã«ã¯ä»®æ³é¢æ°ãå«ãŸããŠããŸãããä»®æ³ãã¹ãã©ã¯ã¿ã¯ååšããŸããã datawriter.cpp 47
IDataWriter<ElemType>* m_dataWriter; .... template <class ElemType> void DataWriter<ElemType>::Destroy() { delete m_dataWriter; // <= V599 warning m_dataWriter = NULL; }
ã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžã¯ãç Žå£å¯èœãªãªããžã§ã¯ãã®ããŒã¹ã¿ã€ãã«ä»®æ³ãã¹ãã©ã¯ã¿ãŒããªãããšã瀺ããŸãã ãã®å Žåã掟çã¯ã©ã¹ã®ãªããžã§ã¯ãã®ç Žå£ã¯ãããã°ã©ã ã®æªå®çŸ©ã®åäœãå¿ èŠãšããŸãã å®éã«ã¯ãããã«ããã¡ã¢ãªãªãŒã¯ãçºçããããä»ã®ãªãœãŒã¹ã解æŸãããªãå¯èœæ§ããããŸãã ãã®èŠåã®åå ãç解ããŠã¿ãŸãããã
template <class ElemType> class DATAWRITER_API IDataWriter { public: typedef std::string LabelType; typedef unsigned int LabelIdType; virtual void Init(....) = 0; virtual void Init(....) = 0; virtual void Destroy() = 0; virtual void GetSections(....) = 0; virtual bool SaveData(....) = 0; virtual void SaveMapping(....) = 0; };
ã芧ã®ãšãããããã¯åºæ¬ã¯ã©ã¹ã®å®çŸ©ã§ããä»®æ³é¢æ°ãå«ãŸããŠããŸãããä»®æ³ãã¹ãã©ã¯ã¿ã¯ãããŸããã
m_dataWriter = new HTKMLFWriter<ElemType>();
ãããã£ãŠã掟çã¯ã©ã¹ãHTKMLFWriterãã®ãªããžã§ã¯ãã«ã¡ã¢ãªãå²ãåœãŠãããŸãã 説æãèŠã€ããŸãã
template <class ElemType> class HTKMLFWriter : public IDataWriter<ElemType> { private: std::vector<size_t> outputDims; std::vector<std::vector<std::wstring>> outputFiles; std::vector<size_t> udims; std::map<std::wstring, size_t> outputNameToIdMap; std::map<std::wstring, size_t> outputNameToDimMap; std::map<std::wstring, size_t> outputNameToTypeMap; unsigned int sampPeriod; size_t outputFileIndex; void Save(std::wstring& outputFile, ....); ElemType* m_tempArray; size_t m_tempArraySize; .... };
åºæ¬ã¯ã©ã¹ã«ä»®æ³ãã¹ãã©ã¯ã¿ããªãããããã®ãªããžã§ã¯ãã¯æ£ããç Žæ£ãããŸããã outputDimsãoutputFilesãªã©ã®ãã¹ãã©ã¯ã¿ã¯åŒã³åºãããŸããã äžè¬ã«ããäžå®ã®æ¯ãèããã¯ãããšåŒã°ããç¡é§ã§ã¯ãªãããããã¹ãŠã®çµæãäºæž¬ããããšã¯äžå¯èœã§ãã
ãã®ä»ã®ãšã©ãŒ
V502ãããããã?:ãæŒç®åã¯äºæ³ãšã¯ç°ãªãæ¹æ³ã§åäœããŸãã ãïŒïŒãæŒç®åã®åªå é äœã¯ã|ããããäœã æŒç®åã sequenceparser.h 338
enum SequenceFlags { seqFlagNull = 0, seqFlagLineBreak = 1, // line break on the parsed line seqFlagEmptyLine = 2, // empty line seqFlagStartLabel = 4, seqFlagStopLabel = 8 }; long Parse(....) { .... // sequence state machine variables bool m_beginSequence; bool m_endSequence; .... if (seqPos) { SequencePosition sequencePos(numbers->size(), labels->size(), m_beginSequence ? seqFlagStartLabel : 0 | m_endSequence ? seqFlagStopLabel : 0 | seqFlagLineBreak); // add a sequence element to the list seqPos->push_back(sequencePos); sequencePositionLast = sequencePos; } // end of sequence determines record separation if (m_endSequence) recordCount = (long) labels->size(); .... }
åªå äžé æŒç®å 'ïŒïŒ' äœåªå 床ã®ãããåäœã®ORã|ãã ãšã©ãŒã®ãããã©ã°ã¡ã³ããåå¥ã«æ€èšããŠãã ããã
0 | m_endSequence ? seqFlagStopLabel : 0 | seqFlagLineBreak
ã³ãŒãã§ã¯ããããããšã®æäœã¯æå®ããããã©ã°ã§ã®ã¿å®è¡ãããããšãäºæ³ãããŠããŸããããæŒç®åã®äºæããªãå®è¡é åºã®ããã«ãã0 | m_endSequenceãã§ã¯ãªããm_endSequenceïŒ seqFlagStopLabelïŒ0 | seqFlagLineBreakãã
äžè¬çã«ãããã¯èå³æ·±ãã±ãŒã¹ã§ãã ãšã©ãŒã«ãããããããã³ãŒãã¯æ£ããæ©èœããŸãã è² ããORã0ã®å Žåãå¹æã¯ãããŸããã ããã«ããããããããšã©ãŒã¯æé©ã«ä¿®æ£ãããŸãã
ããã«2ã€ã®ãã®ãããªå ŽæïŒ
- V502ãããããã?:ãæŒç®åã¯äºæ³ãšã¯ç°ãªãæ¹æ³ã§åäœããŸãã ãïŒïŒãæŒç®åã®åªå é äœã¯ã|ããããäœã æŒç®åã sequenceparser.h 433
- V502ãããããã?:ãæŒç®åã¯äºæ³ãšã¯ç°ãªãæ¹æ³ã§åäœããŸãã ãïŒïŒãæŒç®åã®åªå é äœã¯ã|ããããäœã æŒç®åã sequenceparser.h 598
V530é¢æ° 'size'ã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã basics.h 428
// TODO: merge this with todouble(const char*) above static inline double todouble(const std::string& s) { s.size(); // just used to remove the unreferenced warning double value = 0.0; .... }
äžèšã®ã³ã¡ã³ãã瀺ããŠããããã«ããã®æç¹ã§ééãã¯ãããŸããããç§ã¯çç±ã®ããã«ãã®äŸãæããŸããïŒ
ãŸããã³ã³ãã€ã©ã®èŠåãç¡å¹ã«ããããã«ãUNREFERENCED_PARAMETERãã¯ãããããŸãããã®ãã¯ãã®ååã¯ãé¢æ°ãã©ã¡ãŒã¿ãŒãæå³çã«äœ¿çšãããŠããªãããšãæ確ã«ç€ºããŠããŸãã
#define UNREFERENCED_PARAMETER(P) (P) static inline double todouble(const std::string& s) { UNREFERENCED_PARAMETER(s); .... }
第äºã«ããšã©ãŒã瀺ãå¯èœæ§ãé«ãå¥ã®ã¢ãã©ã€ã¶ãŒèŠåã衚瀺ãããïŒ
V530é¢æ° 'empty'ã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã utterancesourcemulti.h 340
template <class UTTREF> std::vector<shiftedvector<....>>getclassids(const UTTREF &uttref) { std::vector<shiftedvector<....>> allclassids; allclassids.empty(); // <= .... }
emptyïŒïŒé¢æ°ã®çµæã䜿çšããªãããšã¯æå³ããããŸããã ã»ãšãã©ã®å Žåã圌ãã¯clearïŒïŒé¢æ°ã䜿çšããŠãã¯ãã«ãã¯ãªã¢ãããã£ãã®ã§ãããã
åæ§ã®å ŽæïŒ
- V530é¢æ° 'empty'ã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã utterancesourcemulti.h 364
V688ããŒã«ã«å€æ°ãm_fileãã¯ã¯ã©ã¹ã¡ã³ãã®1ã€ãšåãååãæã£ãŠãããããæ··ä¹±ãæãå¯èœæ§ããããŸãã sequencereader.cpp 552
template <class ElemType> class SequenceReader : public IDataReader<ElemType> { protected: bool m_idx2clsRead; bool m_clsinfoRead; bool m_idx2probRead; std::wstring m_file; // <= .... } template <class ElemType> template <class ConfigRecordType> void SequenceReader<ElemType>::InitFromConfig(....) { .... std::wstring m_file = readerConfig(L"file"); // <= if (m_traceLevel > 0) { fprintf(stderr, "....", m_file.c_str()); } .... }
ã¯ã©ã¹ãã¯ã©ã¹é¢æ°ãããã³ã¯ã©ã¹ãã©ã¡ãŒã¿ãŒã§åãååã®å€æ°ã䜿çšããããšã¯ãéåžžã«æªãããã°ã©ãã³ã°ã¹ã¿ã€ã«ã§ãã ãã®äŸã§ã¯ãå€æ° "std :: wstring m_file = readerConfigïŒL" file "ïŒ;"ã®å®£èš æ¬åœã«ããã«ããã¹ãã ã£ããããããã°ã®ããã«äžæçã«è¿œå ãããåŸãåé€ããã®ãå¿ããŸãããïŒ
éçºè ã¯ãããšæ¬¡ã®å Žæã確èªããå¿ èŠããããŸãã
- V688ããŒã«ã«å€æ°ãm_fileãã¯ã¯ã©ã¹ã¡ã³ãã®1ã€ãšåãååãæã£ãŠãããããæ··ä¹±ãæãå¯èœæ§ããããŸãã sequencereader.cpp 1554
- V688 'm_mbStartSample'é¢æ°ã®åŒæ°ã¯ãã¯ã©ã¹ã¡ã³ããŒã®1ã€ãšåãååãæã£ãŠãããããæ··ä¹±ãçããå¯èœæ§ããããŸãã sequencereader.cpp 2062
- V688ããŒã«ã«å€æ°ãm_fileãã¯ã¯ã©ã¹ã¡ã³ãã®1ã€ãšåãååãæã£ãŠãããããæ··ä¹±ãæãå¯èœæ§ããããŸãã lusequencereader.cpp 417
ãããã«
Computational Network ToolkitïŒCNTKïŒ-æ€èšŒçšã®å°èŠæš¡ãªããéåžžã«èå³æ·±ããããžã§ã¯ãã§ããããšãå€æããŸããã CNTKãããžã§ã¯ãããªãŒãã³ããã®ã¯ããæè¿ã®ããšãªã®ã§ãä»ã®Microsoftãããžã§ã¯ãã®ãªãŒãã³ãåŸ ã€ãšãšãã«ãCNTKãããžã§ã¯ãã䜿çšããèå³æ·±ããœãªã¥ãŒã·ã§ã³ãåŸ ã£ãŠããŸãã
è±èªã話ãèŽè¡ãšãã®èšäºãå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSvyatoslav Razmyslovã ããªã人工ç¥èœããªãã®ã§ããïŒããŸãã¯ãMicrosoft Researchã®CNTKããŒã«ãããã®åæ ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã