在下面的代码中,我想访问在函数内部动态分配的结构元素。我已经全局声明了结构,但是在fun1()内部分配了结构。收到结构元素后,我无法访问该结构元素。请帮助我哪里出问题了。如果在单个功能中,则可以正常工作。提前致谢。

struct s1
{
    int a;
    char b[10];
} *s2;

int val;
void main()
{
    fun1();
    fun2();

    printf("\n Element a %d",(s1->a));
}

fun1()
{
    struct s1 *s2=malloc(sizefof(struct s1)*val);
    recv(fd,(void)&s2,sizeof(struct s1),0);
}

fun2()
{
    printf("\n Element a %d",(s1->a));
}

最佳答案

这里有很多混乱。

这样的事情可能就是您想要的:

struct s1
{
    int a;
    char b[10];
};

struct s1 * fun1(int val)
{
    struct s1 *s = malloc(val * sizeof *s);
    if(s != NULL)
      recv(fd, s, val * sizeof *s, 0);
    return s;
}

void fun2(struct s1 *ptr)
{
    printf("First element's a %d", ptr[0].a);
}

int main(void)
{
    struct s1 *data = fun1(100);
    fun2(data);

    printf("First element's a is %d", data[0].a);
    return 0;
}


请注意,recv()也可能会失败,因此应进行检查。它也应该是read()吗?

基本上,我删除了全局变量,并修复了分配和指针使用方面的基本错误。

关于c - 访问函数内部的动态分配的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27904619/

10-17 03:00