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 回目の試行が成功した理由と、最初の試行が失敗した理由は何ですか?