首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未初始化的值由堆栈分配创建。

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

Stack Overflow用户
提问于 2014-10-04 08:01:09
回答 2查看 25.9K关注 0票数 13

我使用工具Val差伦调试了我的代码。它在此函数中显示了此错误。我给出了下面的错误和我的函数。我不知道这里有什么问题?我该怎么纠正呢?我的错误是。

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

我的密码是。

代码语言:javascript
运行
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-04 08:09:39

错误的含义本质上是在分配变量之前使用它。唯一可以应用于ddmmyy的变量。

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

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

票数 7
EN

Stack Overflow用户

发布于 2014-10-04 08:15:29

斯堪夫不存在错误检查,这意味着一些变量可能仍未初始化并在使用后使用。

代码语言:javascript
运行
复制
std::string str = "invalid";
unsigned int dd,mm,yy;
cout << dd << " " << mm << " " << yy << endl;
cout << "Arguments read: " << sscanf(str.c_str(),"%2d %2d %4d",&mm,&dd,&yy) << endl;
cout << dd << " " << mm << " " << yy;

上面的代码可能以输出的形式发出:

代码语言:javascript
运行
复制
32550 3249645428 32550
Arguments read: 0
32550 3249645428 32550

其中所有三个参数都未初始化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26190881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档