Stucture values not staying, values changed to -85

2019-08-29 08:57发布

问题:

I'm clearly doing something wrong or forgetting something. I have defined a structure in a header file with four variables. I then assign values to those variables in a function located in a different .cpp then I try and take the new values from the structure and assign to different variable in another function. Problem is, I'm able to assign values to the variables in the structure but when I try and transfer those values to other variables they become something like -858993460(this is according to the debugger and watching the threads). How do I fix this?

Structure Defined with it's function(even though not it's not currently be used)

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

** Assigning Values to Structure variables**

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

Attempting to transfer those values to another variable

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

回答1:

You're setting values on a local (automatic) variable. Those changes are local to the function in which the variable is declared (OnBnClickSet()).

If you want to use a single instance of Serial, you will need to either pass it in to the OnBnclickSet() function, or make it available via some other means (using a global variable or singleton for instance).

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;
}


回答2:

but when I try and transfer those values to other variables they become something like -858993460

That's a Magic Number. Convert it to Hex to get 0xcccccccc. Which is the value that's used to initialize variables when you build your program with the Debug configuration settings.

So whenever you see it back in the debugger, you go "Ah! I'm using an uninitialized variable!" All we can really see from the snippet is that your Set1 struct never got initialized. Focus on the code that's supposed to do this, with non-zero odds that you just forgot to write that code or are using the wrong structure object.