メモリ操作

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ryo

メモリ操作

#1

投稿記事 by ryo » 15年前

http://hengband.es.land.to/hengband-1.7.0-svn/S/19.html
http://hengband.es.land.to/hengband-1.7.0-svn/S/25.html

今上記ソースを参考に自分用のメモリ操作のツールを作っているのですが、
コンパイラの警告レベルを上げた場合に、
FREEに渡したintが使われていないためにコンパイルエラーになってしまいます。

標準命令のfreeが確保済みsizeを引数に取らないので、FREE(P, T)のTは必要ないのですが、
デバッグの時は、開放した領域をカウントしておきたいんです。

コンパイルエラーにならず、デバッグ時に開放した領域をカウントする方法はないでしょうか?

--- 例 ---

#include "z-virt.h"

int main(void)
{
>___int *a_int_p;
>___
>___a_int_p = RNEW(int);
>___FREE(a_int_p, int); /* Error: When VERBOSE_RALLOC is not included */
>___
>___return 0;
}

Justy

Re:メモリ操作

#2

投稿記事 by Justy » 15年前

>開放した領域をカウントしておきたいんです
 こんなんとかどうですか?

#include <stdlib.h>

typedef struct allocate_info
{
size_t size;
} allocate_info;

void *debug_malloc_(size_t size)
{
allocate_info *ainfo = (allocate_info*)malloc(sizeof(allocate_info) + size);
if(ainfo)
{
ainfo->size = size;
return (void*)(ainfo + 1);
}
return NULL;
}

void debug_free_(void *p)
{
if(p)
{
allocate_info *ainfo = (allocate_info *)p - 1;
// ainfo->size : サイズ
free(ainfo);
}
}

#define RNEW(T) (T*)(debug_malloc_(sizeof(T)))
#define FREE(P) debug_free_(P)

int main(void)
{
int *p = RNEW(int);
FREE(p);
return 0 ;
}

ryo

Re:メモリ操作

#3

投稿記事 by ryo » 15年前

これならFREEした領域が分かりますし、
参考URLのFREE(P, T)の用に型のサイズを渡さなくていいので、手間が省けていいですね。

ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る