-1

ポインタのメモリ割り当ては両方のシナリオで同じですか

struct_datatype * p=NULL;

struct_datatype * p=malloc;

スタックとヒープからのメモリ割り当てとは別に ??

4

2 に答える 2

1

最初のケースでは、ポインタはアドレス0を指すように初期化されます。したがって、ポインタが指すデータにアクセスすると、ポインタがアクセス可能なメモリ位置を指さないため、0ポインタ例外が発生します。

2番目のケースでは、p =(struct_datatype *)malloc(sizeof(struct_datatype)); メモリはポインタに割り当てられて割り当てられるため、pを介してそのメモリにアクセスできます。たとえば、xが構造体のintフィールドである場合、このxを次のように設定できます。p->x=123

于 2012-12-17T13:08:35.070 に答える
0

質問はあなたが何を求めているのか明確ではありません。

struct_datatype * p=NULL; にメモリが割り当てられていませんp。割り当てられたメモリがないことを示します。

struct_datatype * p=malloc(); 一部のメモリが割り当てられている可能性があり、割り当てられたメモリのアドレスがに割り当てられていpます。mallocが失敗した場合、NULLがに割り当てられpます。

注:sizeofpstruct_datatype*、どちらの場合もsizeofになります。

注:ポインタ変数には、コンパイル時にどちらの場合もsizeofであるスタックp内のメモリが割り当てられます。ポインタに格納されているアドレスは、ユーザーアドレス空間でアクセス可能な有効なメモリアドレスを指している可能性があります。アドレスが割り当てられていない場合(およびNULLがユーザーアクセス可能なアドレスではない場合) 、割り当てられた場合(成功した場合)、割り当てられたメモリのアドレスがヒープスペースからポインタに割り当てられます。それ以外の場合は、NULLに割り当てられます。struct_datatype*pNULLmallocp

于 2012-12-17T13:07:52.813 に答える