zoukankan      html  css  js  c++  java
  • 关于C语言指针的问题

      在学习关于C语言指针的时候,发现这样一个问题,代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    struct A{
        int a;
        char b;
    };
    
    struct B{
        struct A *n;
    };
    struct B *new_B(){
        struct A t = { 100, 'c'};
        struct B *p;
        p = (struct B *) malloc(sizeof(struct B));
        p->n = &t;
        return p;
    }
    int main(void) {
        struct B *p;
        p = new_B();
        printf("%d, %c
    ", p->n->a, p->n->b);
        free(p);
        return 0;
    }

      函数new_B的作用是新建一个结构体B的指针变量p,并为它分配内存,然后在函数中建立一个结构体A的变量t,并把这个变量的地址&t赋给B的成员n(n是结构体A的指针)。我们知道, t是一个局部变量,存放在栈中,在函数new_B执行结束后,t会被释放。而当我们返回主函数,然后输出,可以得到正确的结果。如果我们去掉分配内存这一行,也就是p = (struct B *) malloc(sizeof(struct B)); 执行就会出错(这也是我想要得到的结果)。

      问题是,就算分配了内存,new_B函数执行完以后t就会被释放掉,那么在主函数访问 p->n是,应该也会出错。为什么在主函数中还可以访问呢? 

      请大牛给予指导解答!!!

  • 相关阅读:
    re模块
    Docker的使用
    flask中请求勾子
    flask中的蓝图实现模块化的应用
    HTTP中常见的各种状态码详解及解决方案
    git快速入门
    2st week blog 1
    web个人介绍
    CentOS7下shell脚本实现限定范围类的随机数
    CentOS7下shell脚本大小比较
  • 原文地址:https://www.cnblogs.com/meibenjin/p/3375319.html
Copyright © 2011-2022 走看看