/** * @file mymalloc.c * * * @brief 動的メモリ確保を行う関数 * * エラーが起こった場合,即座にエラー終了します. * * * * @brief Dynamic memory allocation funtions * * When allocation error occured within these functions, the program will * exit immediately. * * * @author Akinobu LEE * @date Thu Feb 17 16:27:03 2005 * * $Revision: 1.7 $ * */ /* * Copyright (c) 1991-2012 Kawahara Lab., Kyoto University * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology * Copyright (c) 2005-2012 Julius project team, Nagoya Institute of Technology * All rights reserved */ #include /** * Allocate a memory, as the same as malloc. * * @param size [in] required size in bytes. * * @return pointer to the the newly allocated area. */ void * mymalloc(size_t size) { void *p; if ( (p = malloc(size)) == NULL) { #if defined(_WIN32) && !defined(__CYGWIN32__) jlog("Error: mymalloc: failed to allocate %Iu bytes\n", size); #else jlog("Error: mymalloc: failed to allocate %zu bytes\n", size); #endif exit(1); } return p; } /** * Allocate a memory for huge block, check for limit * * @param size [in] required size in bytes. * * @return pointer to the the newly allocated area. */ void * mymalloc_big(size_t elsize, size_t nelem) { void *p; double limit; if (sizeof(size_t) == 4) { /* 32bit environment */ limit = (double)4294967296.0 / elsize; /* 2^32 */ if (nelem >= limit) { #if defined(_WIN32) && !defined(__CYGWIN32__) jlog("Error: mymalloc_big: %Iu bytes x %Iu unit exceeds 4GB limit\n", elsize, nelem); #else jlog("Error: mymalloc_big: %zu bytes x %zu unit exceeds 4GB limit\n", elsize, nelem); #endif exit(1); } } if ( (p = malloc(nelem * elsize)) == NULL) { #if defined(_WIN32) && !defined(__CYGWIN32__) jlog("Error: mymalloc_big: failed to allocate %Iu x %Iu bytes\n", elsize, nelem); #else jlog("Error: mymalloc_big: failed to allocate %zu x %zu bytes\n", elsize, nelem); #endif exit(1); } return p; } /** * Re-allocate memory area, keeping the existing data, as the same as realloc. * * @param ptr [in] memory pointer to be re-allocated * @param size [in] required new size in bytes * * @return pointer to the the newly allocated area with existing data. */ void * myrealloc(void *ptr, size_t size) { void *p; if ( (p = realloc(ptr,size)) == NULL) { #if defined(_WIN32) && !defined(__CYGWIN32__) jlog("Error: mymalloc: failed to reallocate %Iu bytes\n", size); #else jlog("Error: mymalloc: failed to reallocate %zu bytes\n", size); #endif exit(1); } return p; } /** * Allocate memory area and set it to zero, as the same as calloc. * * @param nelem [in] size of element in bytes * @param elsize [in] number of elements to allocate * * @return pointer to the newly allocated area. */ void * mycalloc(size_t nelem, size_t elsize) { void *p; if ( (p = calloc(nelem,elsize)) == NULL) { #if defined(_WIN32) && !defined(__CYGWIN32__) jlog("Error: mymalloc: failed to clear-allocate %Iu bytes\n", nelem*elsize); #else jlog("Error: mymalloc: failed to clear-allocate %zu bytes\n", nelem*elsize); #endif exit(1); } return p; }