關於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));

strcpy(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!

1 malloc后的內存除了等到free來釋放,還可以等到程序運行結束時自動釋放
2 程序運行過程中,如果一直malloc內存而不釋放會導致這部分內存不能被再次使用,即內存泄露。這樣以來,應用程序會逐漸用光所有可用的內存,最終導致應用程序因內存不足而崩潰停止。
3 所以一個好的習慣是,malloc后一定要記得free之。


免責聲明!

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



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