mfc中获取本地IP地址 代码执行散乱

mfc中获取本地IP地址 代码执行错乱
我写了一个 获取本地ip地址的 函数 , 这个函数 放在了 App 的 Initinstantce 中执行,
可是在执行这个函数的时候 ,发现 代码执行错乱。



int CCheckConnectionApp::GetLocalAllIpAddr(void)
{
char HostName[HOSTNAMESIZE] = {0};    //HOSTNAMESIZE 大小是255
if (SOCKET_ERROR == gethostname(HostName, sizeof(HostName)))
{
MessageBox(0, "Get HostName Faild.", "Error", MB_OK);
return -1;
}

struct hostent *phe = gethostbyname(HostName);
if(NULL == phe)
{
MessageBox(0, "Get Host Faild.", "Error", MB_OK);
return -1;
}

for(int i = 0; NULL != phe->h_addr_list[i]; i++)
{
struct in_addr * addr = (struct in_addr *)phe->h_addr_list[i];
m_LocalIpVec.push_back(inet_ntoa(*addr)); 
                //m_LocalIpVec 是一个成员变量 声明是 :std::vector<string> m_LocalIpVec
}
        return 0;
}


发生代码执行紊乱的地方 就在 这个for循环, 调试运行时, 执行到  for 循环后 按f10 下一步 到了 return 0;
再按f10后 代码竟然 到了循环体里面 就是 struct in_addr * addr = (struct in_addr *)phe->h_addr_list[i];这句。
然后会正常的 一步一步走, 直到函数结束返回。
工程没再多些一些别的代码 ,不知道为什么 代码会这么执行, 怀疑是 内存被破坏了。
但是在别人的机器上也是这个样子 ,难道 mfc 的框架不稳定?还是使用 在mfc中 使用STL 对内存有影响?
------解决思路----------------------
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
mfc中获取本地IP地址 代码执行散乱多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程!
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步Debug版对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

------解决思路----------------------
lz调的是release版本?还是debug版本里,把优化给打开了?