2015-02-12 42 views
0

我有一个程序用C是什么让这两个指针不同?

我想要做的就是复制pApListpApListCp

ScanResult *pApListCp; 
void ApListCallback(ScanResult *pApList) 
{ 
     ap_num = pApList->ApNum; 
     printf("ApListCallback,ap_num=%i\r\n",ap_num); 
     for(i=0;i<ap_num;i++){ 
      char * ssidc = pApList->ApList[i].ssid; 
      char temp[500] = ""; 
      strcpy(temp, ssidc); 
      printf("ap cb,ssid=%s\r\n",temp); 
      free(temp); 
     } 
    //memcpy(&hugebuf[sizeof(mxchip_cmd_head_t)-1], pApList->ApList, ap_num*sizeof(ApList_str)); 
    pApListCp=pApList; 
    startScan = 0; 
} 

,我也打印了两次。

case CMD_SCAN: 

     printf("4 scan \r\n"); 
     mxchipStartScan(); 
     startScan = 1; 

     while(startScan == 1){ 
      mxchipTick(); 
     } 

     ap_num = pApListCp->ApNum; 
     printf("\r\ncmd scan,ap_num=%i\r\n",ap_num); 
     for(i=0;i<ap_num;i++){ 
      char * ssidc = pApListCp->ApList[i].ssid; 
      char temp[500] = ""; 
      strcpy(temp, ssidc); 
      printf("cmd scan,ssid=%s\r\n",temp); 
      free(temp); 
     } 
     memcpy(p_reply->data, pApListCp->ApList, ap_num*sizeof(ApList_str)); 
      //memcpy((char *) & p_reply->data[CONFIG_DATA_SIZE], pApListCp->ApList, ap_num*sizeof(ApList_str)); 

     p_reply->datalen = ap_num*sizeof(ApList_str); 
     break; 

但是这两个结果似乎不同。

现在的结果是这样的:

4 scan 
ApListCallback,ap_num=16 
ap cb,ssid=Modim fashion 
ap cb,ssid=timelessgz2 
ap cb,ssid= 
ap cb,ssid=timelessgz1 
ap cb,ssid=sweet baby 
ap cb,ssid=sweet baby 2 
ap cb,ssid=JIMMY 3G 
ap cb,ssid=ringierguest 
ap cb,ssid=wudiuandiuan 
ap cb,ssid=ChinaNet-GPi6 
ap cb,ssid=Bert-Co 
ap cb,ssid=TP-LINK_CBD04C 
ap cb,ssid=ChinaNet-Ul6 
ap cb,ssid=ZOC-TC5 
ap cb,ssid=VAIO-VAIO_Network 
ap cb,ssid=blue1 

cmd scan,ap_num=16 
cmd scan,ssid=屨 m fashion 
cmd scan,ssid=timelessgz2 
cmd scan,ssid= 
cmd scan,ssid=timelessgz1 
cmd scan,ssid=sweet baby 
cmd scan,ssid=sweet baby 2 
cmd scan,ssid=JIMMY 3G 
cmd scan,ssid=ringierguest 
cmd scan,ssid=wudiuandiuan 
cmd scan,ssid=ChinaNet-GPi6 
cmd scan,ssid=Bert-Co 
cmd scan,ssid=TP-LINK_CBD04C 
cmd scan,ssid=ChinaNet-Ul6 
cmd scan,ssid=ZOC-TC5 
cmd scan,ssid=VAIO-VAIO_Network 
cmd scan,ssid=blue1 

是什么让第一项Modim fashion错了?

+0

Unicode/ASCII的问题? – Mints97 2015-02-12 04:34:20

+0

@ Mints97但其他项目字符串没有问题? – chanjianyi 2015-02-12 04:35:25

+2

提供[a **最小**,完整和可验证示例](http://stackoverflow.com/help/mcve)。 – 2015-02-12 04:36:26

回答

1

问题可能是由于free(temp);引起的。您没有在此处分配任何内存,那么为什么免费?

temp作为本地数组将被存储在堆栈空间中,编译器在函数退出后重用堆栈。

+0

事实上,野生指针(实际上是在这种情况下的地址)上的* free *可能会导致UB。 – 2015-02-12 05:18:05

+0

我试图删除程序中的循环2 ...但得到了相同的结果..所以weired .. – chanjianyi 2015-02-12 05:58:14

+0

如果你删除了循环,那么你打印什么? – Vagish 2015-02-12 06:01:23