mokeekeeのブログ

初心者レベルのプログラミングと英文の備忘録とその他

DLL内の動的配列

DLLにポインタを渡し、DLL内で自動でメモリを確保する関数があるとき、

void DLL_Something(char *p)

{

int size=xxxxxxxx;      //size値の計算

p = new char[size];

}

 

それを開放するのはDLLであって、EXEが勝手にやってはならない。つまり、

char *p;

DLL_Something(p);

DoSomething(p);

delete[] p;

はダメ。

例え確保したメモリのアドレスがあってもダメ。DLLにやらせる。

(といっても、DLLが解放のための関数を持っていてEXEがそれを呼ぶのは面倒で忘れることもあるのでこの方法はよろしくない。)