0

私の問題があまり明確でない場合は申し訳ありません。私はこのような構造を持っています:

typedef struct
{
    uint32_t typeSet;
}DataTypeTagInfo;

次の関数は、2 つの typeSet を統合するためのものです。

DataTypeTagInfo* unifyTagInfo(DataTypeTagInfo* tag1, DataTypeTagInfo* tag2){
    if(tag1 == NULL) return tag2;
    else if(tag2 == NULL) return tag1;
    tag1->typeSet |= tag2->typeSet;
    return tag1;
}

次の行の実行中にプログラムが終了します。

    tag1->typeSet |= tag2->typeSet;

サンプルの実行では、次の値を取得しました。

tag1->typeSet = 3917954189
tag2->typeSet = 2536589

エラーメッセージはありません。ただやめる。助けてください。

4

1 に答える 1

2

あなたが示すコードは完全に健全です。したがって、アボート時にtag1またはが無効なポインタである可能性が非常に高くなります。tag2これは、投稿したコードとは関係ありません。ポインターは、非常に多くの方法で無効に設定できます。

何が起こっているのかを理解するために、コード設定tag1tag2呼び出しサイトを注意深く確認することから始めます。答えが表示されない場合は、使用valgrindしてメモリの上書きエラーをチェックします。

NBこれがC(++)を非常に困難にしている理由です。

于 2012-09-04T00:47:43.250 に答える