程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 關於C語言指針的問題

關於C語言指針的問題

編輯:關於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\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是,應該也會出錯。為什麼在主函數中還可以訪問呢?      請大牛給予指導解答!!!
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved