游穆族人 2017-05-21 02:39 采纳率: 100%
浏览 1000
已采纳

C语言一个结构体指针的问题

我用一个子函数初始化了一个结构体并返回结构体的地址,但是却发现在主函数中输出的num和str字符串和子函数中输出的不一样,主函数中输出的内容更像是一些乱码,但是两个函数中的地址是一致的,这是哪儿出现什么问题了吗?

代码如下,大家可以测试一下(这个代码并没有实际意义,就是在练习结构体时候瞎写的)

 #include <stdio.h>

struct Test
{
    int num;
    char str[20];
};

struct Test * function();

int main()
{
    struct Test *p = function();

    printf("address : %p\n", p);

    printf("num = %d\n", p->num);
    printf("str = %s\n", p->str);
}

struct Test * function()
{

    struct Test test =
    {
        10,
        "hello world"
    };

    struct Test *p = &test;

    printf("num = %d\n", p->num);
    printf("str = %s\n", p->str);

    printf("address : %p\n", p);

    return p;
}

附上运行结果图:
第一行是子函数中的num
第二行是子函数中的str
第三行是子函数中返回的地址
第四行是主函数中接收到的地址
第五行是主函数中的num
第六行是主函数中的str
图片说明

  • 写回答

4条回答

  • Blue_sky90 2017-05-21 02:56
    关注

    你的p指针指向的内存已经释放了。test是个局部变量,函数返回的时候内存就回收了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析
  • ¥100 我想找人帮我写Python 的股票分析代码,有意请加mathtao
  • ¥20 Vite 打包的 Vue3 组件库,图标无法显示
  • ¥15 php 同步电商平台多个店铺增量订单和订单状态
  • ¥15 关于logstash转发日志时发生的部分内容丢失问题
  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题