Grace、 2020-12-22 11:48 采纳率: 50%
浏览 11

关于c 编程问题请教

typedef struct {
    int a;
    void *b;
} test_t;


void func3(void *args)
{
    test_t tt = (test_t *)args;

    printf("%d: %s\n", tt->a, (char *)tt->b);
}



int func2(void *args, size_t len)
{
    void *s;    

    if (len) {
        s = calloc(1, len);
        memcpy(s, args, len); 
    }    
    func3(s);    

    return 0;
}

int func1()
{
    test_t t;
    const char *ss = "abcddddd";
 
    t.a = 1;
    t.b = strdup(ss);
    func1((void *)&t, siztof t);
 
    return 0;
}


int main()
{
    func1();   
    exit(0);
}

这里想问以下, func3函数中tt->b 有问题吗,还是指向func1中那个申请的内存吗?

哪位大佬能够分析一下阿,有点晕。

 

  • 写回答

5条回答 默认 最新

  • 平安格勒_星 2020-12-22 13:26
    关注
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct {
        int a;
        void *b;
    } test_t;
     
     
    void func3(void *args)
    {
        test_t *tt = (test_t *)args;//我改过
    
        printf("%d: %s\n", tt->a, (char *)tt->b);
    }
     
     
     
    int func2(void *args, size_t len)
    {
        void *s;    
    
        if (len) {
            s = calloc(1, len);
            memcpy(s, args, len); 
        }    
        func3(s);    
    
        return 0;
    }
     
    int func1()
    {
        test_t t;
        const char *ss = "abcddddd";
    
        t.a = 1;
        t.b = strdup(ss);
        func2((void *)&t, sizeof(t));//我改过
    
        return 0;
    }
     
     
    int main()
    {
        func1();   
        exit(0);
    }

    虽然不知道你要干嘛或者做什么测试,只是把你的错误修改了,详见注释,有什么问题再讨论

    结果如下:

    评论

报告相同问题?