1. 程式人生 > >C++讀書筆記—malloc()函式的注意點及使用示例

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!