0

私は明らかに何か間違ったことをしている、または何かを忘れています。4つの変数を使用してヘッダーファイルに構造を定義しました。次に、別の.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;
}
4

2 に答える 2

2

しかし、それらの値を他の変数に転送しようとすると、-858993460 のようになります

それがマジックナンバーです。これを 16 進数に変換して 0xcccccccc を取得します。これは、デバッグ構成設定を使用してプログラムをビルドするときに変数を初期化するために使用される値です。

そのため、デバッガーに戻って表示されるたびに、「ああ! 初期化されていない変数を使用しています!」というメッセージが表示されます。スニペットから実際にわかるのは、Set1 構造体が初期化されていないことだけです。これを行うはずのコードに注目してください。そのコードを書き忘れているか、間違った構造体オブジェクトを使用している可能性はゼロではありません。

于 2013-02-12T21:09:04.100 に答える
2

ローカル (自動) 変数に値を設定しています。これらの変更は、変数が宣言されている関数に対してローカルです ( OnBnClickSet())。

の 1 つのインスタンスを使用する場合は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;
}
于 2013-02-12T21:08:20.570 に答える