fryptus 2022-12-14 10:53 采纳率: 50%
浏览 47

关于#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

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2022-12-14 11:00
    关注

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

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 12月14日

悬赏问题

  • ¥15 如何在animate html5文档任意位置实现文本输入功能?
  • ¥15 电机正反转电路设计中,mos管的关断问题,求原因。
  • ¥15 关于#sql#的问题:怎么找出所有同时多张有效保单的车架号
  • ¥15 KFC账号下单提示拒绝操作
  • ¥20 HC32F460串口发送仅能接到一个数据
  • ¥15 求解答一下是否可以修改一个软件运行时生成的文件内部内置的文件创建时间?
  • ¥20 WIN10蓝屏问题!
  • ¥15 Mac经常自动关机,再次打开后提示“电脑因出现问题而重新启动”
  • ¥60 使用ovito软件怎么得到金属玻璃的自由体积
  • ¥15 急!如何实现根据汇编指令推测硬件功能?