关于#c++#的问题:0xC0000005: 读取位置0x00000000时发生访问冲突

0xC0000005: 读取位置0x00000000时发生访问冲突
问题截图如下:

img

通过断点单步运行初步排查出问题指针为:szFileModel
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;
}

问题其他相关截图:

img

img

img

这是操作了空指针啊
通过断点单步运行初步排查出问题指针为:szFileModel----那就看调用这个函数的代码,一层一层向上找,看看这个空指针从哪里产生出来的

sCmdLine=sCmdLine+TEXT(" "")+szFileModel+TEXT(""");
szFileModel是个指针,它怎么还能和字符串相加