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

申請內存的問題

編輯:關於C語言

   初學者容易忘記申請內存的問題,在這裡記錄一下,以備自己粗心大意造成程序調試的麻煩。

/****************************有bug的程序****************************/


#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

struct person {
    int age ;
    char name;
};

struct student {
    struct person abc;
    int id;
};

struct student *f1;

int main(void)
{
    f1->id = 20;
    printf("%d \n", f1->id);

    f1->abc.age = 20; 
    printf("%d \n", f1->abc.age); 

    return 0;
}

    有個網友將上面這段簡單的代碼發到QQ群上說,到底哪裡有錯?怎麼看都不像有錯的程序呀?但是一運行就是出不來結果。這正是內存沒有申請成功的原因,操作系統不讓你執行,因為可能訪問到了不該訪問的地址。指針嘛,有時候挺野蠻的,需要慎重使用。

/****************************無bug的程序****************************/
 

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

struct person {
    int age ;
    char name;
};

struct student {
    struct person abc;
    int id;
};


int main(void)
{
    struct student *f1 = (struct student *)malloc(sizeof(struct student));
    f1->id = 20;
    printf("%d \n", f1->id);
 
    f1->abc.age = 20; 
    printf("%d \n", f1->abc.age); 

    free(f1);
    return 0;
}


    修改後的程序如上,就是加多了malloc申請內存的語句,當然不使用的時候也要釋放掉它,良好習慣嘛^_^。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved