关于c 编程问题请教

Grace、 2020-12-22 11:53:34
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中那个申请的内存吗?

哪位大佬能够分析一下阿,有点晕。
...全文
3457 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2020-12-23
  • 打赏
  • 举报
回复
func3没有问题,但你func3根本就没有调用到 你调用到的func1,有问题,递归调用没有退出条件,最终运行到栈崩溃
forget345 2020-12-22
  • 打赏
  • 举报
回复
func1((void *)&t, siztof t); 错误,你要的应该是 func2((void *)&t, siztof t);
test_t tt = (test_t *)args; 错误,你要的应该是 test_t *tt = (test_t *)args;

在 func2 中 s = calloc(1, len); 应该已经是一段新内存了

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧