程序有access violation有关问题

程序有access violation问题
主函数
C/C++ code
int main(int argc,char *argv[])
{
    HANDLE   thread[2];
    WCHAR    adaptername[8192];
    WCHAR    *name1,*name2;
    ULONG    adapterlength;
    DWORD    threadsid,threadrid;
    int      adapternum,open,i;
    
    //system("cls.exe");
/*    
   if(argc!=4)
    {
        usage();
        return -1;
    }
*/
    firstip=inet_addr("10.0.0.209");
    secondip=inet_addr("10.0.1.254");
    virtualip=inet_addr("10.0.1.28");

/*    firstip=inet_addr(argv[1]);
    secondip=inet_addr(argv[2]);
    virtualip=inet_addr(argv[3]);
*/
    //获得物理地址
   if(getmac()==FALSE)
    {
        return -1;
    }
    
    adapterlength=sizeof(adaptername);
    
    if(PacketGetAdapterNames((char *)adaptername,&adapterlength)==FALSE)//获得网卡适配器名称
    {
        printf("PacketGetAdapterNames Error: %d\n",GetLastError());
        return -1;
    }
    
    name1=adaptername;
    name2=adaptername;
    i=0;
    
    while((*name1!='\0') || (*(name1-1)!='\0'))
    {
        if(*name1=='\0')
        {
            memcpy(adapterlist[i],name2,2*(name1-name2));
            name2=name1+1;
            i++;
        }
        name1++;
    }
    
    adapternum=i;

    printf("Adapters Installed: \n");
    for(i=0;i<adapternum;i++)
    {
        wprintf(L"%d - %s\n",i+1,adapterlist[i]);  
    }
    do
    {
        printf("\nSelect the number of the adapter to open: ");
        scanf("%d",&open);
        if(open>=1 && open<=adapternum)
            break;
    }while(open<1 || open>adapternum);
    
    lpadapter=PacketOpenAdapter(adapterlist[open-1]);
    if(!lpadapter || (lpadapter->hFile==INVALID_HANDLE_VALUE))
    {
        printf("PacketOpenAdapter Error: %d\n",GetLastError());
        return -1;
    }
    
    if((lppackets=PacketAllocatePacket())==FALSE)
    {
        printf("PacketAllocatePacket Send Error: %d\n",GetLastError());
        return -1;
    }
    
    thread[0]=CreateThread(NULL,0,sniff,NULL,0,&threadrid);
    if(thread[0]==NULL)
    {
        printf("CreateThread for sniffer Error: %d\n",GetLastError());
        return -1;
    }
    thread[1]=CreateThread(NULL,0,arpspoof,NULL,0,&threadsid);
    if(thread[1]==NULL)
    {
        printf("CreateThread for arpspoof Error: %d\n",GetLastError());
        return -1;
    }
    WaitForMultipleObjects(2,thread,FALSE,INFINITE);
    
    CloseHandle(thread[0]);             //关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。
    CloseHandle(thread[1]);
    PacketFreePacket(lppackets);        //释放_PACKET结构
    PacketFreePacket(lppacketr);
    PacketCloseAdapter(lpadapter);      //关闭网卡//关闭适配器
    
    return 0;
}


单步试调后发现
C/C++ code
adapternum=i;

    printf("Adapters Installed: \n");

到这里出问题,name1、i、adapternum not found可是我都有定义,并没有清楚。而且i的值也显示成功赋给了adapternum。求大神指导~这个全代码是dns—id欺骗的。

------解决方案--------------------
memcpy 拷贝时越界了