のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

VS2008のCallocは、0個の確保でも、ポインタに値が入った

VS2008で、callocを行ったとき、
0個の確保でも、ポインタに値が入った。

NULLが返ってくると思っていた。

void calloc_test
{
	unsigned char *ptr = NULL;

	ptr = (unsigned char *)calloc(0, sizeof(unsigned char));

	if (ptr == NULL)
	{
		return 1;
	}

	if(ptr !=NULL)
	{
		free(ptr);
	}
}

calloc
MSのサンプルだと、NULLチェックしてる。

errを取得してみたが、正常(0のまま)だった。

#include <stdlib.h>
#include <errno.h>

int _tmain(int argc, _TCHAR* argv[])
{
	unsigned char *ptr = NULL;
	errno_t err;

	_get_errno(&err);
	if (err != 0)
	{
		return 3;
	}

	ptr = (unsigned char *)calloc(0, sizeof(unsigned char));

	_get_errno(&err);
	if (err == ENOMEM)
	{
		return 2;
	}

	if (ptr == NULL)
	{
		return 1;
	}

	if(ptr !=NULL)
	{
		free(ptr);
	}

	return 0;
}