【问题标题】:Stucture values not staying, values changed to -858993460结构值未保留,值更改为 -858993460
【发布时间】:2013-01-28 06:54:54
【问题描述】:

我显然做错了什么或忘记了什么。我在带有四个变量的头文件中定义了一个结构。然后,我将值分配给位于不同 .cpp 中的函数中的这些变量,然后尝试从结构中获取新值并分配给另一个函数中的不同变量。问题是,我可以为结构中的变量赋值,但是当我尝试将这些值传递给其他变量时,它们变成了 -858993460(这是根据调试器和观察线程)。 我该如何解决这个问题?

用它的功能定义的结构(即使不是它当前没有被使用)

struct Setting {
    int Max;
    int Min;
    int Sample;
    int Points;
} Set1, Set2;

** 为结构变量赋值**

void Settings::OnBnClickSet() {
    GetDlgItemText(ID_Points,str4);
    CW2A buf3((LPCWSTR)str4);
    Serial Value;
    Value.Set1.Points = atoi(buf3);
}

尝试将这些值转移到另一个变量

bool Serial::Temperature(CString) {
    int Max,Min,SampleTime,Points;
    Max = Set1.Max;
    Min = Set1.Min;
    SampleTime = Set1.Sample;
    Points = Set1.Points;
}

【问题讨论】:

  • 您可能需要向我们展示一个更完整但可能更小的示例程序来说明您正在做什么。
  • 什么是Serial?你能把它减少到sscce.org吗?您正在设置Value.Set1.*,但试图从Set1.* 中获取数据(即没有Value.)?这是你的真实代码吗?
  • 只需阅读此链接:sscce.org 减少此类问题可能非常困难,尤其是在大型程序中。但是,通常尝试的练习会提供足够的信息,以便您首先找到您正在寻找的错误的来源。
  • -858993460 的 32 位二进制补码表示为 0xcccccccc
  • struct Setting(没有尾随's')和Settings之间是什么关系?其中一个是错字吗?

标签: c++ function mfc struct dialog


【解决方案1】:

但是当我尝试将这些值转移到其他变量时,它们变成了类似于 -858993460

这是一个神奇的数字。将其转换为十六进制得到 0xcccccccc。当您使用 Debug 配置设置构建程序时,这是用于初始化变量的值。

所以每当你在调试器中看到它时,你会说“啊!我正在使用一个未初始化的变量!”我们可以从 sn-p 中真正看到的是您的 Set1 结构从未被初始化。专注于应该执行此操作的代码,您只是忘记编写该代码或使用了错误的结构对象的可能性不为零。

【讨论】:

    【解决方案2】:

    您正在为本地(自动)变量设置值。这些更改对于声明变量的函数是局部的 (OnBnClickSet())。

    如果您想使用Serial 的单个实例,您需要将其传递给OnBnclickSet() 函数,或通过其他方式使其可用(例如使用全局变量或单例)。

    void Settings::OnBnClickSet() {
        GetDlgItemText(ID_Points,str4);
        CW2A buf3((LPCWSTR)str4);
    
        // This creates a Serial object with automatic storage duration
        Serial Value;
    
        // You're setting the value on the local (automatic) variable.
        Value.Set1.Points = atoi(buf3);
    
        // Value will now go out of scope, all changes to it were
        // local to this function
    }
    
    
    bool Serial::Temperature(CString) {
        int Max,Min,SampleTime,Points;
    
        // The member (?) variable Set1 was never modified on this instance of `Serial`
        Max = Set1.Max;
        Min = Set1.Min;
        SampleTime = Set1.Sample;
        Points = Set1.Points;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 2012-10-31
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多