Giải phóng bộ nhớ động trong C/C++ - Hàm free(), delete

Giải phóng bộ nhớ động trong c

Khi đã cấp phát bộ nhớ cho biến, và sau đó tất cả các hành động liên quan tới biến đó đã được thực thi, lúc này biến này không còn giá trị sử dụng nữa. Để tránh tốn tài nguyên RAM trên máy tính ta sẽ cần giải phóng bộ nhớ đó, trong bài viết này chúng ta sẽ tìm hiểu về hàm giải phóng bộ nhớ trong C và C++.

XEM THÊM: Cấp phát bộ trong động C/C++ – malloc, realloc, calloc, new

Giải phóng bộ nhớ trong C

Trong bài viết trước ta có chương trình như sau.

#include <stdio.h>
#include <stdlib.h>

 
int main(){
    int *a;//Khai bao con trỏ a
     
    int n;
    printf("Nhap so phan tu: ");
    scanf("%d", &n);
     
     a = (int *) malloc(n * sizeof(int));

    for(int i = 0; i<n; i++){
        printf("a[%d] = ", i);
        scanf("%d", &a[i]);
    }
     
    printf("\n\nMang vua nhap:  ");
    for(int i = 0; i<n; i++){
        printf("%d ", a[i]);
    }
}

Để giải phóng bộ nhớ trong C ta sử dụng hàm free().

Cú pháp

void free(void *ptr)

Vậy để giải phóng bộ nhớ trong trương trình trên ta thêm đoạn code như sau:

#include <stdio.h>
#include <stdlib.h>
 
int main(){
    int *a;//Khai bao con trỏ a
     
    int n;
    printf("Nhap so phan tu: ");
    scanf("%d", &n);
     
  a = (int *) malloc(n * sizeof(int));

    for(int i = 0; i<n; i++){
        printf("a[%d] = ", i);
        scanf("%d", &a[i]);
    }
     
    printf("\n\nMang vua nhap:  ");
    for(int i = 0; i<n; i++){
        printf("%d ", a[i]);
    }

     free(a); //Giải phóng bộ nhớ cho  con trỏ a
}

Giải phóng bộ nhớ trong C++

Trong C++ để giải phóng bộ nhớ ta có thể sử dụng delete.

Cú pháp:

delete ptr

Trong đó: ptr là con trỏ cần giải phóng bộ nhớ.

hoặc nếu con trỏ là một mảng int, hay một mảng chuỗi...hàm delete ta có thể viết như sau:

delete[] ptr

Ví dụ áp dụng

#include <iostream>
 
using namespace std;
 
int main(){
    int *ptr = new int; //Cấp phát bộ nhớ cho con trỏ ptr
    *ptr = 5;
    
    int *ptr1 =new int[3]; //Cấp phát bộ nhớ cho con trỏ ptr1
    ptr1[0] = 1;
    ptr1[1] = 2;
    ptr1[2] = 5;
    
    delete(ptr); //Giải phóng bộ nhứ ptr
    delete(ptr1); //Giải phóng bộ nhứ ptr1
    cout<<"Da giai phong bo nho thanh cong";
}

Cảm ơn bạn đã đọc hết bài viết!! Đọc thêm bài trước Cấp phát bộ trong động C/C++ – malloc, realloc, calloc, new

[XEM TẤT CẢ BÀI VIẾT CHỦ ĐỀ C/C++ TẠI ĐÂY]