我希望能将malloc/realloc方法的调用封装到一个宏中,如果这个方法返回NULL,则停止程序。请问下面的宏是否安全可靠?
#define SAFEMALLOC(SIZEOF) (malloc(SIZEOF) || (void*)(fprintf(stderr,"[%s:%d]Out of memory(%d bytes)\n",__FILE__,__LINE__,SIZEOF),exit(EXIT_FAILURE),0))
char* p=(char*)SAFEMALLOC(10);
代码可以编译,使用 SAFEMALLOC(1UL)
和 SAFEMALLOC(-1UL)
可以正常运行,但这样做是否安全呢?
SIZEOF
会被评估两次(虽然程序退出并不是灾难,但仍然需要注意)。 - Kninnug