Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C / C ++でのmalloc()とnew()


malloc()

関数malloc()は、要求されたサイズのバイトを割り当てるために使用され、割り当てられたメモリの最初のバイトへのポインタを返します。失敗した場合はnullポインタを返します。

C ++言語でのmalloc()の構文は次のとおりです。

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

ここで

pointer_name −ポインタに付けられた任意の名前。

キャストタイプ −malloc()によって割り当てられたメモリをキャストするデータ型。

サイズ −割り当てられたメモリのサイズ(バイト単位)。

これがC言語のmalloc()の例です

#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;
}

これが出力です

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

上記のプログラムでは、4つの変数が宣言されており、そのうちの1つはmallocによって割り当てられたメモリを格納しているポインタ変数*pです。要素の合計を印刷しています。

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

新しい演算子は、ヒープ内のメモリ割り当てを要求します。十分なメモリが利用可能な場合、メモリをポインタ変数に初期化し、そのアドレスを返します。

これがC++言語の新しい演算子の構文です

pointer_variable = new datatype;

メモリを初期化するための構文は次のとおりです

pointer_variable = new datatype(value);

これがメモリのブロックを割り当てるための構文です

pointer_variable = new datatype[size];

これがC++言語の新しい演算子の例です

#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;
}

出力

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

上記のプログラムでは、3つのポインター変数がptr1、ptr2、およびptr3として宣言されています。ポインタ変数ptr1とptr2は、new()を使用して値で初期化され、ptr3はnew()関数によって割り当てられたメモリブロックを格納します。

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

  1. C / C ++のmemcpy()

    この記事では、C ++ STLでのmemcpy()関数の動作、構文、および例について説明します。 memcpy()とは何ですか? memcpy()関数は、C ++ STLに組み込まれている関数であり、ヘッダーファイルで定義されています。 memcpy()関数は、メモリのブロックをコピーするために使用されます。この関数は、あるメモリ位置から別のメモリ位置に値の数をコピーするために使用されます。 関数の結果は、データのバイナリコピーです。この関数は、終了ソースまたは終了ヌル文字をチェックせず、ソースからnumバイトをコピーするだけです。 例 void memcpy( void* destin

  2. C / C ++のAAツリー?

    コンピュータサイエンスのAAツリーは、順序付けられたデータを効率的に保存および取得するために実装されたバランスの取れたツリーの形式として定義されます。 AAツリーは、エントリの効率的な追加と削除をサポートするバイナリ検索ツリーの形式である赤黒ツリーのバリエーションとして扱われます。赤黒木とは対照的に、AAツリーの赤いノードは、左のサブチャイルドではなく、右のサブチャイルドとしてのみ追加できます。この操作の結果、2-3-4ツリーではなく2-3ツリーのシミュレーションが行われるため、メンテナンス操作が簡素化されます。赤黒木のメンテナンスアルゴリズムでは、ツリーのバランスを適切にとるために、7つの異