C++讀書筆記—malloc()函式的注意點及使用示例
1、malloc()函式的標頭檔案是stdlib.h,其函式宣告如下:
void* malloc(size_t size);
其中引數size_t size表示動態記憶體分配空間的大小,以位元組為單位。
size_t 是typedef重定義的型別,重定義這樣資料型別的作用就是讓使用者一目瞭然,指示使用者這個引數表示一個長度,在 size後加上t,表示是整型相關資料型別的,以後看到xxx_t的型別,通常都是整型相關資料型別重定義。
在這裡malloc()函式的返回值是一個指標,或者說是分配後記憶體空間的首地址
如果malloc()函式申請空間成功則返回一段記憶體空間的首地址,失敗則返回NULL
2、int *p;
p = malloc(sizeof(int));
在這裡是不能這樣寫的,會出現錯誤:從型別 'void*' 到型別‘int’的轉換無效,應該改為:
p =(int *) malloc(sizeof(int));
3、在使用malloc()函式申請的空間之前,最好用memset()函式把這段記憶體空間清理一下,因為用malloc()函式申請的空間僅僅保 證的是記憶體空間的大小,並不保證記憶體空間是否有資料垃圾
4、當不在使用malloc()函式申請的空間之後,應該使用如下函式釋放掉這個記憶體空間:
void free(void *ptr);
其中void *ptr是malloc()函式的返回值,也就是記憶體空間的首地址
如果只知道使用,而不知道釋放,則在7天*24小時執行的嵌入式產品中,很容易會出現記憶體洩漏,最終導致系統癱瘓
5、malloc()函式動態分配空間程式設計:
/***************************************
malloc()函式動態分配空間程式設計:
(1)定義一個char*型指標變數p
(2)為p分配10個位元組的記憶體空間
(3)複製"come on" 字串到p指向的記憶體空間
(4)將p指標指向的記憶體空間再擴大20個位元組
(5)將",baby!"字元複製在p指向空間字串的後面
(6)釋放p指向的空間
****************************************/
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
char *p;
p = (char *)malloc(10*sizeof(char));
memset(p,0,10*sizeof(char));
stpcpy(p,"come on");
cout << "p: " << p << endl;
p =(char *)realloc(p,20*sizeof(char));
cout << "p: " << sizeof(p) << endl;
strcat(p,",baby!");
cout << "p: " << p << endl;
free(p);
return 0;
}
輸出:
p: come on
p: 4
p: come on,baby!