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語言記憶體
- Delphi 記憶體與指標記憶體指標
- C語言重點——指標篇(一文讓你完全搞懂指標)| 從記憶體理解指標 | 指標完全解析C語言指標記憶體
- C語言第九周作業(指標變數,記憶體訪問,取址,空指標)C語言指標變數記憶體
- C 語言中的指標和記憶體洩漏指標記憶體
- c和指標中關於動態分配記憶體malloc和qsort的一個例子指標記憶體
- NULL 指標、零指標、野指標Null指標
- 野指標 空指標指標
- C語言指標C語言指標
- C語言(指標)C語言指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- 學了指標沒學動態記憶體一切都白搭!C語言基礎教程之記憶體管理指標記憶體C語言
- C語言 指標與陣列C語言指標陣列
- C語言指標(二) 指標變數 ----by xhxhC語言指標變數
- 指標體系與樹型結構指標
- C語言-記憶體分配C語言記憶體
- C語言-指標操作C語言指標
- [譯]Swift 結構體指標Swift結構體指標
- C語言指標安全及指標使用問題C語言指標
- c++動態記憶體智慧指標及weak_ptr用法的理解C++記憶體指標
- 從預設解構函式學習c++,new,delete,記憶體洩漏,野指標函式C++delete記憶體指標
- C語言的記憶體分配C語言記憶體
- C語言malloc()函式:動態分配記憶體空間C語言函式記憶體
- 野指標定位指標
- c語言指標彙總C語言指標
- C語言指標學習C語言指標
- c語言指標詳解C語言指標
- C語言_結構體變數指標做函式引數的使用案例C語言結構體變數指標函式
- iOS野指標定位總結iOS指標
- C語言指標部分教學總結C語言指標
- C語言-記憶體管理之一[記憶體分配]C語言記憶體