bool SVMTrain(TCHAR*szFileData,TCHAR*szFileModel,TCHAR*szFileDataScaleParam,int iKernelFunc,int iFold,TCHAR*szOtherParams,tstring &sRetString)
{
tstring sAppPath=FMAddBackSlash(pApp->Path());
tstring sSVMExeTrain=sAppPath+mc_szTrainExeFile;
if (szFileData&&szFileModel&&_tcscmp(szFileData,szFileModel)==0)
{
sRetString=TEXT("特征数据文件和要生成的model文件不能是同一文件");
return false;
}
if (szFileData&&szFileDataScaleParam&&_tcscmp(szFileModel,szFileDataScaleParam)==0)
{
sRetString=TEXT("特征数据文件和归一化参数文件不能是同一文件");
}
if (szFileModel&&szFileDataScaleParam&&_tcscmp(szFileModel,szFileDataScaleParam)==0)
{
sRetString=TEXT("要生成的model文件和归一化参数文件不能是同一文件");
return false;
}
TCHAR*szPath=NULL,*szExp=NULL;
TCHAR*szFileNameOnly=FMTrimFileName(szFileData,true,true,&szPath,&szExp);
tstring sFileDataScale,sCmdLine;
if (!SVMScaleData(szFileData,szFileDataScaleParam,false,sFileDataScale))
{
sRetString=sFileDataScale;
return false;
}
sCmdLine=TEXT("\"")+sSVMExeTrain+TEXT("\" ");
sCmdLine=sCmdLine+TEXT(" -t ")+Str(iKernelFunc);
if (szFileModel==NULL)
sCmdLine=sCmdLine+TEXT(" -v")+Str(iFold);
sCmdLine=sCmdLine+TEXT(" ")+szOtherParams+TEXT(" ");
sCmdLine=sCmdLine+TEXT(" \"")+sFileDataScale+TEXT("\" ");
if(szFileModel!=NULL)
sCmdLine=sCmdLine+TEXT(" \"")+szFileModel+TEXT("\"");
if (!RunBat(szPath,TEXT("svmtrain.bat"),sCmdLine))
{
sRetString=TEXT("SVM训练失败,无法在文件夹:");
sRetString=sRetString+szPath+TEXT("中创建或运行批处理文件:svmtrain.bat ")+TEXT("请设置断点后检查此文件的内容");
return false;
}
tstring sFileResult;
if (szFileModel==NULL)
{
sFileResult=sFileDataScale+TEXT("(t=")+Str(iKernelFunc)+TEXT(").training_result");
if (FMFileExist(sFileResult.c_str())!=1)
{
sRetString=TEXT("SVM训练失败,未能生成训练结果文件:")+sFileResult;
return false;
}
sRetString=sFileResult;
}
else
{
if (FMFileExist(szFileModel)!=1)
{
sRetString=TEXT("model文件生成失败,未能生成model文件:");
sRetString=sRetString+szFileModel;
return false;
}
sRetString=szFileModel;
}
return true;
}
这是操作了空指针啊
通过断点单步运行初步排查出问题指针为:szFileModel----那就看调用这个函数的代码,一层一层向上找,看看这个空指针从哪里产生出来的
sCmdLine=sCmdLine+TEXT(" "")+szFileModel+TEXT(""");
szFileModel是个指针,它怎么还能和字符串相加