そのためにC標準を検索しましたが、その質問については何も見つかりませんでした。それが実装定義の場合、このようにmallocを使用することが常に安全なのはなぜですか?
char *p = (char*) malloc(100);
if (p == NULL)
return;
for (i=0; i<100; i++)
{
p[i] = ........
}
そのためにC標準を検索しましたが、その質問については何も見つかりませんでした。それが実装定義の場合、このようにmallocを使用することが常に安全なのはなぜですか?
char *p = (char*) malloc(100);
if (p == NULL)
return;
for (i=0; i<100; i++)
{
p[i] = ........
}
メモリを割り当てられなかった場合、malloc は NULL を返します。だからこそ、そのようにテストすることができます。
NULL は標準でヌル ポインターとして定義されており、任意のオブジェクトまたは関数へのポインターと等しくないことが保証されています。これは、メモリの場所にはなり得ないもののアドレスです。
ポインターは、メモリの場所を指すだけです。C では、メモリを割り当てると、そのメモリの最初のバイトが常にポイントされます。メモリの開始位置とサイズがわかれば、メモリの終了位置がわかります。
ただし、ポインターはその配列内の任意の場所を指すことができます。char * p_pointer = p + 1 または同等の &p[1]; を設定できます。p_pointer[-1] は p[0] を指します。