//IPアドレスを取得
char* GetMyIPAddress()
{
// WinSockの初期化
WSADATA wsaData;
// エラー処理
if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
return "error";
// IPアドレス/ホスト名の取得
HOSTENT *lpHost; //ホスト情報の格納
IN_ADDR addr; //アドレス格納
char HostBuffer[256] = "", IPBuffer[16] = ""; //ホスト名,IPアドレス
printf(IPBuffer);
//ホスト名取得
if( gethostname(HostBuffer, (int)sizeof(HostBuffer)) == -1)
return "error";
lpHost = gethostbyname(HostBuffer);
// IPアドレスを取得(メインのv4IPアドレス取得)
memcpy(&addr, lpHost->h_addr_list[0], 4);
strcpy(IPBuffer, inet_ntoa(addr));
※1
//winsockの終了
WSACleanup();
return IPBuffer;
}
上記コードで、debugモードでビルド、実行をすると、うまくIPBufferにIPが入り、取得できるのですが
Releaseモードでビルド、実行すると、IPBufferに入っているはずなのですが、IPを取得できません。
コード中の"※1"のところにprintf(IPBuffer)のコードを1行足すだけで、なぜかIPが取得できます。
いったいどうしてなのでしょう。
IPBuffer[16]を*IPBuffer = new char[16]にしてもうまくいきます。ということは初期化関連で何かおかしいことをしているのかな?と思っていますが、いまいちよくわかりません。
またnew char[16]してしまうとIPBufferを返り値に設定している関係上メモリリークが気持ち悪いので、このあたりどうしたら開放できるかのご教授もいただけるとうれしいです。(別の変数にしてそちらを返り値にする以外の方法でお願いいたします。)
拙い文章で申し訳ありませんがよろしくお願いします。