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、

1 int *p; 2 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()函數動態分配空間編程:

 1 /***************************************  2 malloc()函數動態分配空間編程:  3 (1)定義一個char*型指針變量p  4 (2)為p分配10個字節的內存空間  5 (3)復制"come on" 字符串到p指向的內存空間  6 (4)將p指針指向的內存空間再擴大20個字節  7 (5)將",baby!"字符復制在p指向空間字符串的后面  8 (6)釋放p指向的空間  9 ****************************************/
10 #include <iostream>
11 #include <cstdlib>
12 #include <cstring>
13 using namespace std; 14 
15 int main() 16 { 17   char *p; 18   p = (char *)malloc(10*sizeof(char)); 19 
20   memset(p,0,10*sizeof(char)); 21 
22   strcpy(p,"come on"); 23   cout << "p: " << p << endl; 24 
25   p =(char *)realloc(p,20*sizeof(char)); 26   cout << "p: " << sizeof(p) << endl; 27 
28   strcat(p,",baby!"); 29   cout << "p: " << p << endl; 30 
31   free(p); 32    return 0; 33 }

輸出:

1 p: come on 2 p: 4
3 p: come on,baby!

 



 


免責聲明!

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



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