我有一个包含 int 指针的结构
struct mystruct {
int *myarray;
};
我想创建一个为 mystruct 分配并初始化 myarray 的函数。但是,当我尝试访问 myarray 的一个元素时,我得到了一个 seg。过错
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
}
但是,在 main 中分配 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
}
为什么第二次尝试成功,为什么第一次尝试失败?