设为首页 加入收藏

TOP

关于C语言指针的问题
2013-11-20 14:18:45 来源: 作者: 【 】 浏览:194
Tags:关于 语言 指针 问题

  在学习关于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\n", 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是,应该也会出错。为什么在主函数中还可以访问呢?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言六种“位运算符” 下一篇C语言位运算符的基础普及

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: