c語言野指標與結構體指標動態記憶體分配小解
首先我們來看一道題:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
char *name; //改 char name [ ];
int score;
}*pstu;
int main()
{
pstu=(struct student*)malloc(sizeof(struct student)); ///將地址轉成struct student* 型
改:char *p=NULL;
strcpy(pstu->name,“tom”);
pstu->score=99;
改:char *p=NULL;
printf(“name =%s,score =%d\n”,pstu->name,pstu->score);
free§;
return 0;
}
原式是一個野指標問題,為了避免出現野指標,通常我們需要將指標初始化為NULL,用完後也為其賦值為NULL。
結構體成員指標往往會被我們忽視,所以說注意它也需要初始化,且需要為結構體指標分配足夠的記憶體!那麼就用到了malloc這個巨集,使用方法如下:
給指標變數賦初值:
方法一:char * p = (char * )malloc(sizeof(char));
方法二:char * p = NULL;
給陣列賦初值:
方法一: int a[10] = {0};
方法二: memset(a, 0, sizeof(a));
memset函式有3個引數:第一個是要被設定的記憶體起始地址;第二個是要被設定的值;第三個是要被設定的記憶體大小,單位為位元組;注意不要混淆:
給結構體指標賦初值:
方法一: pstu = (struct student *)malloc(sizeof(struct student));
常見錯誤: pstu = (struct student *)malloc(sizeof(struct student *));
使用完指標後務必記得釋放指標所指向的記憶體,否則不知道什麼時候我們又改變了指標的值,使其變成了野指標!
這裡就需要free§這個函式的幫忙了,它可以切斷指標與指向記憶體的聯絡。但是需要注意的是free對於同一指標變數只能使用一次。不然會導致出錯或者記憶體洩漏。
釋放完記憶體後另指標的值變為NULL!
如下:
free§;
p = NULL;
另外補充一下動態記憶體分配的有關函式
開闢動態儲存區 #include<stdlib.h>
malloc voidmalloc(unsigned int size); 在記憶體的動態儲存區分配一個長度為size的連續空間 malloc(100) a=(int )malloc(nsizeof(int)) 將nsizeof(int)個記憶體給a
calloc void*calloc(unsigned n,unsigned size); 在記憶體的動態儲存區分配n個長度為size的連續空間 p=calloc(50,4) 50x4個位元組的臨時分配域;
relloc voidrelloc(voidp,unsigned int size); 重新分配動態儲存區; relloc(p,50) 將p所指向的已分配的動態空間改為50位元組;
free void free(void*p); 釋放動態儲存區 free(p)釋放指標p所指向的已分配的動態空間;
相關文章
- C++ 指標動態記憶體分配C++指標記憶體
- C語言學習筆記:結構體與指標C語言筆記結構體指標
- c++動態記憶體管理與智慧指標C++記憶體指標
- C++ - 二級指標動態記憶體申請與釋放C++指標記憶體
- C語言第九周作業(指標變數,記憶體訪問,取址,空指標)C語言指標變數記憶體
- C語言重點——指標篇(一文讓你完全搞懂指標)| 從記憶體理解指標 | 指標完全解析C語言指標記憶體
- C語言指標筆記C語言指標筆記
- 函式指標、回撥函式、動態記憶體分配、檔案操作函式指標記憶體
- C語言-記憶體分配C語言記憶體
- C語言指標C語言指標
- 學了指標沒學動態記憶體一切都白搭!C語言基礎教程之記憶體管理指標記憶體C語言
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- C語言 指標與陣列C語言指標陣列
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數
- C語言的記憶體分配C語言記憶體
- c++動態記憶體智慧指標及weak_ptr用法的理解C++記憶體指標
- 從預設解構函式學習c++,new,delete,記憶體洩漏,野指標函式C++delete記憶體指標
- C++動態記憶體分配C++記憶體
- c語言指標彙總C語言指標
- C語言指標用法大全C語言指標
- C語言 函式指標C語言函式指標
- C語言基礎-指標C語言指標
- C語言指標學習C語言指標
- 「程式設計師面試」一文搞懂野指標、懸空指標、空指標和記憶體洩漏,附程式碼示例!程式設計師面試指標記憶體
- C語言學習之:指標與字串C語言指標字串
- C語言知識彙總 | 51-C語言字串指標(指向字串的指標)C語言字串指標
- C語言知識彙總 | 56-C語言NULL空指標以及void指標C語言Null指標
- iOS野指標定位總結iOS指標
- Go語言入門系列(五)之指標和結構體的使用Go指標結構體
- 野指標定位指標
- C語言指標詳解(一)C語言指標
- C語言指標詳解(二)C語言指標
- C語言基礎-1、指標C語言指標
- c語言實現this指標效果C語言指標
- 搞清楚C語言指標C語言指標
- C語言指標基本知識C語言指標
- 指標:存放記憶體地址的變數指標記憶體變數
- 動態記憶體分配記憶體