c語言結構體指針初始化


     今天終於看完了C語言深度剖析這本書,對C語言有了進一步的了解與感悟,突然發覺原來自己學C語言的時候學得是那樣的迷糊,缺少深入的思考,在重新看書的時候發覺C語言基本教材雖然經典,但是缺乏獨到性,老師在講解的過程中也就照本宣科了,沒有多大的啟迪。

     看到C語言內存管理這塊,發覺還是挺有用的,當然平時在編程時基本上就沒有考慮過內存問題。

     定義了指針變量,沒有為指針分配內存,即指針沒有在內存中指向一塊合法的內存,尤其是結構體成員指針未初始化,往往導致運行時提示內存錯誤。

#include "stdio.h"
#include "string.h"

struct student
{
       char *name;
       int score;
       struct student *next;      
}stu, *stul;

int main()
{
       strcpy(stu.name,"Jimy");   
       stu.score = 99;  
       return 0;
}

由於結構體成員指針未初始化,因此在運行時提示內存錯誤

#include   “stdio.h” 
#include   "malloc.h"
#include   "string.h"
  
struct student
{   
    char *name;   
    int score;   
    struct student* next;   
}stu,*stu1;    
  
int main()
{    
    stu.name = (char*)malloc(sizeof(char)); /*1.結構體成員指針需要初始化*/  
    strcpy(stu.name,"Jimy");   
    stu.score = 99;   
    
    stu1 = (struct student*)malloc(sizeof(struct student));/*2.結構體指針需要初始化*/  
    stu1->name = (char*)malloc(sizeof(char));/*3.結構體指針的成員指針同樣需要初始化*/  
    stu.next  = stu1;   
    strcpy(stu1->name,"Lucy");   
    stu1->score = 98;   
    stu1->next = NULL;   
    printf("name %s, score %d \n ",stu.name, stu.score);   
    printf("name %s, score %d \n ",stu1->name, stu1->score);   
    free(stu1);   
    return 0;   
}  

同時也可能出現沒有給結構體指針分配足夠的空間

    stu1 = (struct student*)malloc(sizeof(struct student));/*2.結構體指針需要初始化*/ 

如本條語句中往往會有人寫成

    stu1 = (struct student*)malloc(sizeof(struct student *));/*2.結構體指針需要初始化*/ 

這樣將會導致stu1的內存不足,因為sizeof(struct student)的長度為8,而sizeof(struct student *)的長度為4,在32位系統中,編譯器默認會給指針分配4字節的內存

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM