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; }