1
struct findaddress {
     struct findaddress *next[11];
     struct user *myuser;
};
int main(void){
struct findaddress *findhead=(struct findaddress *)(malloc(sizeof(struct findaddress)));
    int i=0;
    for (i;i!=11;i++){
        if (findhead->next[i]==NULL)puts("success");else puts("fail");
    }
    return 0;
}

結果は、私にとって十分に気がかりなことですが、次のとおりです。

fail
fail
success
success
success
success
success
success
success
success
success

下部の 2 つのポインターが失敗しているのに、他のポインターが通過している理由がわかりません。

どなたか親切に教えていただけませんか?

4

2 に答える 2

5

malloc()メモリを初期化せず、ヒープにスペースを割り当てるだけです。表示される配列の内容はランダムです。あくまで同エリアの前回の内容です。

calloc()ゼロで初期化されていることを確認したい場合に使用します。

于 2013-06-17T03:52:18.387 に答える
2

この場合、何かが何かに初期化されると予想したのはなぜですか? malloc割り当てられたメモリをまったく初期化しません。これは、基本的に実験で観察しているものです。

構造体オブジェクトをゼロで初期化する場合は、次のようにします。

*findhead = (struct findaddress) { 0 };

malloc。または、メモリを物理的な全ビット ゼロ パターンで埋めたい場合は、calloc代わりに を使用しmallocます。

iPSの最初の部分の目的は何for (i;i!=11;i++)ですか? あなたiがすでに事前に初期化されている場合は、単に行うことができますfor (;i!=11;i++).

于 2013-06-17T04:00:43.963 に答える