0

私は C 言語が初めてで、キューを作成する必要がありますが、malloc (メモリ割り当て) とその使用方法を使用する必要があるかどうかはわかりません。私はmallocなしでadd、remove、size、isemptyを実行しましたが、うまくいきました。

    void e1_init(e1queue_t* q){
    q->head = 0;
    q->tail = sizeof(q->queue)/sizeof(int)-1;
    q->size=0;  
    }

ありがとう。

4

3 に答える 3

1

C には、次の 2 種類のメモリがあります。

  • スタック
  • ヒープ

スタックメモリはかなり制限されており、関数の自動変数、処理オーバーヘッドなどに使用されます。

より大きなメモリ チャンクが必要な場合は、 から取得する必要がありますheap

この回答の正確な複製ではありませんが、これは適切な説明のようです:

スタックとヒープとは何ですか?

于 2012-10-20T07:13:53.533 に答える
0

malloc()関数を使用する理由はたくさんあります。

  1. malloc()は、変数にメモリを動的に割り当てるために使用されます。なぜ?メモリを動的に割り当てる理由はたくさんあります。たとえば、特定のオブジェクト/変数のサイズがコンパイル時に不明であり、後でそれを増やす理由がある場合は、メモリ要件を増やす必要があります。これがmallocの出番です。

  2. malloc()を使用してPOINTERSを初期化するのはなぜですか?初期化されていないポインタは、ランダムな場所を指します。この場所にアクセスできず、プログラムがクラッシュする可能性があります。mallocを使用すると、ヒープストレージが増加し、ランダムに初期化されたポインターが、読み取り/書き込みが可能な「正常な」場所を指すようになります。

  3. また、mallocで初期化されたポインターは、realloc()メソッドを使用してサイズを変更できます。これにより、メモリ管理が柔軟になります(エラーが発生しやすくなります)
于 2012-10-20T07:24:33.680 に答える
0

C の動的メモリ割り当てとは、C 標準ライブラリの一連の関数 (malloc、realloc、calloc、および free) を介して C プログラミング言語で動的メモリ割り当てを実行することを指します。

構文:

#include <stdlib.h> 

説明:

この関数malloc()は、サイズ size のメモリのチャンクへのポインタを返します。エラーが発生した場合は NULL を返します。指すメモリはスタックではなくヒープ上にあるため、使い終わったら必ず解放してください。

例:

typedef struct data_type {
  int age;
  char name[20];
} data;

data *bob;
bob = (data*) malloc( sizeof(data) );
if( bob != NULL ) {
  bob->age = 22;
  strcpy( bob->name, "Robert" );
  printf( "%s is %d years old\n", bob->name, bob->age );
}
free( bob ); 

Good Read C の動的メモリ割り当て

于 2012-10-20T07:09:26.410 に答える