Computer >> Máy Tính >  >> Lập trình >> C ++

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

xóa ()

Toán tử xóa được sử dụng để phân bổ bộ nhớ. Người dùng có đặc quyền phân bổ biến con trỏ được tạo bởi toán tử xóa này.

Đây là cú pháp của toán tử xóa trong ngôn ngữ C ++,

delete pointer_variable;

Đây là cú pháp để xóa khối bộ nhớ được cấp phát,

delete[ ] pointer_variable;

Đây là một ví dụ về toán tử xóa trong ngôn ngữ C ++,

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 << "Value of pointer variable 1 : " << *ptr1 << endl;
   cout << "Value of pointer variable 2 : " << *ptr2 << endl;
   if (!ptr3)
   cout << "Allocation of memory failed\n";
   else {
      for (int i = 10; i < 15; i++)
      ptr3[i] = i+1;
      cout << "Value of store in block of memory: ";
      for (int i = 10; i < 15; i++)
      cout << ptr3[i] << " ";
   }
   delete ptr1;
   delete ptr2;
   delete[] ptr3;
   return 0;
}

Đầu ra

Value of pointer variable 1 : 28
Value of pointer variable 2 : 299.121
Value of store in block of memory: 11 12 13 14 15

Trong chương trình trên, ba biến con trỏ được khai báo là ptr1, ptr2 và ptr3. Các biến con trỏ ptr1 và ptr2 được khởi tạo với giá trị bằng new () và ptr3 đang lưu trữ khối bộ nhớ được cấp phát bởi hàm new ().

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

Các phần tử của mảng được in bởi người dùng và tổng các phần tử được in. Để xóa bộ nhớ được cấp phát; xóa ptr1, xóa pt2 và xóa [] ptr3 được sử dụng.

delete ptr1;
delete ptr2;
delete[] ptr3;

miễn phí ()

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

Đây là cú pháp của free () trong ngôn ngữ C,

void free(void *pointer_name);

Đây,

pointer_name - Bất kỳ tên nào được đặt cho con trỏ.

Đây là một ví dụ về free () trong ngôn ngữ 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("\nError! memory not allocated.");
      exit(0);
   }
   printf("\nEnter elements of array : ");
   for(i = 0; i < n; ++i) {
      scanf("%d", p + i);
      s += *(p + i);
   }
   printf("\nSum : %d", s);
   free(p);
   return 0;
}

Đầu ra

Enter elements of array : 32 23 21 28
Sum : 104

Trong chương trình trên, bốn biến được khai báo và một trong số chúng là biến con trỏ * p đang lưu trữ bộ nhớ được cấp phát.

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

Các phần tử của mảng do người dùng cung cấp và tổng các giá trị của chúng được in ra. Mã để giải phóng con trỏ như sau -

free(p);