Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

delete() và free() trong C++


delete()

Toán tử delete dùng giải phóng bộ nhớ. Người dùng giải phóng con trỏ tạo bằng delete.

Cú pháp delete:

delete pointer_variable;

Cú pháp xóa khối bộ nhớ:

delete[] pointer_variable;

Ví dụ delete:

Ví dụ

#include <iostream>
using namespace std;

int main() {
    int *ptr1 = NULL;
    ptr1 = new int;
    float *ptr2 = new float(299.121);
    int *ptr3 = new int[28];
    *ptr1 = 28;
    cout << "Giá trị con trỏ 1: " << *ptr1 << endl;
    cout << "Giá trị con trỏ 2: " << *ptr2 << endl;
    if (!ptr3)
        cout << "Cấp phát bộ nhớ thất bại\n";
    else {
        for (int i = 10; i < 15; i++)
            ptr3[i] = i+1;
        cout << "Giá trị lưu trong khối bộ nhớ: ";
        for (int i = 10; i < 15; i++)
            cout << ptr3[i] << " ";
    }
    delete ptr1;
    delete ptr2;
    delete[] ptr3;
    return 0;
}

Kết quả

Giá trị con trỏ 1: 28
Giá trị con trỏ 2: 299.121
Giá trị lưu trong khối bộ nhớ: 11 12 13 14 15

Ba con trỏ ptr1, ptr2, ptr3 khai báo. ptr1, ptr2 khởi tạo bằng new, ptr3 cấp phát mảng bằng new.

int *ptr1 = NULL; ptr1 = new int; float *ptr2 = new float(299.121); int *ptr3 = new int[28]; *ptr1 = 28;

In phần tử mảng. Giải phóng: delete ptr1, delete ptr2, delete[] ptr3.

delete ptr1; delete ptr2; delete[] ptr3;

free()

Hàm free() giải phóng bộ nhớ cấp phát bởi malloc(). Nó không thay đổi giá trị con trỏ, nghĩa là con trỏ vẫn trỏ đến cùng vị trí bộ nhớ.

Cú pháp free() trong C:

void free(void *pointer_name);

Ví dụ free() trong C:

Ví dụ

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

int main() {
    int n = 4, i, *p, s = 0;
    p = (int*)malloc(n * sizeof(int));
    if (p == NULL) {
        printf("\nLỗi! Không cấp phát bộ nhớ.");
        exit(0);
    }
    printf("\nNhập phần tử mảng: ");
    for (i = 0; i < n; ++i) {
        scanf("%d", p + i);
        s += *(p + i);
    }
    printf("\nTổng: %d", s);
    free(p);
    return 0;
}

Kết quả

Nhập phần tử mảng: 32 23 21 28
Tổng: 104

Bốn biến khai báo, con trỏ p lưu bộ nhớ cấp phát.

int n = 4, i, *p, s = 0; p = (int*)malloc(n * sizeof(int));

Nhập phần tử mảng, in tổng. Giải phóng con trỏ:

free(p);