-2

int ポインターを含む構造体があります

    struct mystruct {
      int *myarray;
    };

mystruct の割り当てを解除し、myarray を初期化する関数を作成したいと考えています。しかし、myarray の要素にアクセスしようとすると、セグメントが発生します。障害

    void myfunction(struct mystruct *s, int len) {
        s = malloc(sizeof(mystruct));
        s->myarray = malloc(sizeof(int) * len);
        int i;
        for (i=0; i<len; i++) {
            s->myarray[i] = 1;
        }
    }

    main() { 
        struct mystruct *m;
        myfunction(m, 10);
        printf("%d", m->myarray[2]); ////produces a segfault
    }

ただし、メインで m を割り当てないことで問題が解決したようです。改訂されたコード:

    void myfunction(struct mystruct *s, int len) {
        int i;
        s->myarray = malloc(sizeof(int) * len); 
        for (i=0; i<len; i++) {
            s->myarray[i] = 1;
        }
     }

     main() {
         struct mystruct *m = malloc(sizeof(mystruct)); //this was in myfunction 
         myfunction(m,10);
         printf("%d", m->myarray[2]); ///Prints out 1 like I wanted
     }

2 回目の試行が成功した理由と、最初の試行が失敗した理由は何ですか?

4

1 に答える 1