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

malloc () so với new () trong C / C ++

malloc ()

Hàm malloc () được sử dụng để cấp phát kích thước byte được yêu cầu và nó trả về một con trỏ đến byte đầu tiên của bộ nhớ được cấp phát. Nó trả về con trỏ null, nếu không thành công.

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

pointer_name = (cast-type*) malloc(size);

Đây,

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

kiểu đúc - Kiểu dữ liệu mà bạn muốn truyền bộ nhớ được cấp phát bởi malloc ().

kích thước - Kích thước của bộ nhớ được cấp phát tính bằng byte.

Đây là một ví dụ về malloc () 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);
   return 0;
}

Đây là kết quả,

Enter elements of array : 32 23 21 8
Sum : 84

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 bộ nhớ được cấp phát bởi malloc. Chúng tôi đang in tổng các phần tử.

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

new ()

Toán tử mới yêu cầu cấp phát bộ nhớ trong heap. Nếu có đủ bộ nhớ, nó sẽ khởi tạo bộ nhớ cho biến con trỏ và trả về địa chỉ của nó.

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

pointer_variable = new datatype;

Đây là cú pháp để khởi tạo bộ nhớ,

pointer_variable = new datatype(value);

Đây là cú pháp để cấp phát một khối bộ nhớ,

pointer_variable = new datatype[size];

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

Ví dụ

#include <iostream>
using namespace std;
int main () {
   int *ptr1 = NULL;
   ptr1 = new int;
   float *ptr2 = new float(223.324);
   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 to store in block of memory: ";
      for (int i = 10; i < 15; i++)
      cout << ptr3[i] << " ";
   }
   return 0;
}

Đầu ra

Value of pointer variable 1 : 28
Value of pointer variable 2 : 223.324
Value to 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 ().

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