2017-04-14 3 views
0

Cでの動的メモリ割り当てのためにmalloc((size_t)NULL)と書かれているのですが?Cでのmalloc((size_t)NULL)の場合

int main() 
{ 
    char *ptr = malloc((size_t)NULL); 
} 

それがヒープセクションにメモリを割り当てますか?またはこれは未定義の動作ですか?

+1

これはmalloc(0)と同じです。 –

+4

コンパイラの警告を処理すると、そのようなコードは実行されません。 –

+0

mallocの引き数は数値でなければならないので、これはコンパイルされません。 NULLは数値ではありません。 char * ptr = malloc(sizeof(NULL)); 8バイトのメモリを割り当てます。 –

答えて

0

これは、定数NULLで定義されたメモリの量を割り当てます。 NULL == 0の場合、動作はimplementation definedです。私はmalloc(NULL)書く起こる何

+1

'NULL == 0'は常にtrueです –

+0

投稿されたコードにNULLの値についての指示はありません。 –

4

...

待ち、は、あなたがmalloc(NULL)を書いていない停止、なぜでしょうか?

malloc()への引数は、予想されるメモリの「サイズ」です。つまり、ではありません。ヌルポインタ定数であると想定されます。です。

C11、チャプタ§7.22.3.4、(強調鉱山

void *malloc(size_t size); 

を引用malloc関数サイズsizeとその値が不定である で指定されたオブジェクトのスペースを割り当てます。ほとんどの場合、NULLがそのようmalloc(NULL)が再び実装定義の動作である、malloc(0)に相当し、整数定数値0で表され、前記

。チャプタ§7.22.3を引用

/P1

[...] のサイズは、要求されたスペースがゼロである場合、動作は実装定義です。、いずれかのヌルポインタ が返されますまたは、動作が、サイズがゼロ以外の値であるかのようになります。ただし、返されたポインタ はオブジェクトへのアクセスに使用されません。

+1

@ M.Mは、その実装が定義されていないことを親切に上記の編集を参照してください。 :) –

関連する問題