未初始化的值由堆栈分配创建

Smi*_*yne 8 c++ valgrind

我使用Valgrind工具调试了我的代码.它在此功能中显示此错误.我在下面给出了错误和我的功能.我不知道这里有什么问题?我怎样才能纠正它?我的错误是.

未初始化的值是由0x80996D7处的堆栈分配创建的:cdtojd(std :: string const&)

我的代码是.

double cdtojd(const string &cdate);

double cdtojd(const string &cdate)
{
    int dd,mm,yy;
    int y,m;
    double jd=0;

    //mm = atoi(cdate.substr(0,2).c_str());
    //dd = atoi(cdate.substr(2,2).c_str());
    //yy = atoi(cdate.substr(4,4).c_str());

    sscanf(cdate.c_str(),"%2d%2d%4d",&mm,&dd,&yy);

    //cout<<mm<<"..."<<dd<<"...."<<yy<<endl;

    y = (yy - 1900) * 372;

    m = (mm-1) * 31;

    jd = dd + m + y;

    return jd;
}
Run Code Online (Sandbox Code Playgroud)

chi*_*ity 6

错误的含义本质上是您在分配给它之前使用了一个变量。这可能适用的唯一变量是dd, mm, yy

这意味着您的sscanf电话不是写给他们三个人的。如果您传入未完全指定的日期,则会发生这种情况。

请注意,sscanf返回一个值来告诉您它写入了多少个变量。您应该检查返回值,如果它没有返回 3,则中止(或填写一些默认值),因为不是所有的字段都已填写。