メモリ管理の改善
[YACASL2.git] / src / cmem.c
1 #include "cmem.h"
2
3 /* mallocを実行し、0で初期化 */
4 /* メモリを確保できない場合はエラーを出力して終了 */
5 void *malloc_chk(size_t size, char *tag)
6 {
7     void *p;
8
9     if((p = malloc(size)) == NULL) {
10         fprintf(stderr, "%s: cannot allocate memory\n", tag);
11         exit(-1);
12     }
13     return memset(p, 0, size);
14 }
15
16 /* callocを実行 */
17 /* メモリを確保できない場合はエラーを出力して終了 */
18 void *calloc_chk(size_t nmemb, size_t size, char *tag)
19 {
20     void *p;
21
22     if((p = calloc(nmemb, size)) == NULL) {
23         fprintf(stderr, "%s: cannot allocate memory\n", tag);
24         exit(-1);
25     }
26     return p;
27 }
28
29 /* malloc_chkを実行してメモリを確保してから、 */
30 /* コピーした文字列を返す */
31 char *strdup_chk(const char *s, char *tag)
32 {
33     assert(s != NULL);
34     char *t;
35
36     t = malloc_chk(strlen(s) + 1, tag);
37     strcpy(t, s);
38     return t;
39 }
40
41 /* メモリがNULLの場合は解放 */
42 void free_chk(void *ptr, char *tag)
43 {
44     if(ptr != NULL) {
45         free(ptr);
46     }
47 }