char **str=NULL;
str=new char *[5] ;
for(int i=0;i<5;i++)
str[i]=new char [50]; unsigned char *pIP; 
CString strIP; 
pIP=(unsigned char*)&m_ip; 
strIP.Format("%u.%u.%u.%u",*(pIP+3),*(pIP+2),*(pIP+1),*pIP); 
int err=GetCh((LPSTR)(LPCTSTR)strIP,(LPSTR)(LPCTSTR)m_tdh,str);
if(!err)
m_err.Format("正常!");
else
m_err.Format("error:%d,%s",err,error[err-100]);
CString name[5]={"Name :","Value:","Alarm:","Min  :","Max  :"};
c_tdz.ResetContent();
for(int i=0;i<5;i++)
{
CString string;
string.Format("%s",str[i]);
string = name[i]+string;
 c_tdz.AddString(string);
}
for(int i=0;i<5;i++)
delete [] str[i];//无法删除
delete [] str;错误信息:Windows 已在 ceshi.exe 中触发一个断点。其原因可能是堆被损坏,这也说明 ceshi.exe 中或它所加载的任何 DLL 中有 bug。输出窗口可能提供了更多诊断信息
GetCh 是动态库里的函数
如下:
for(int i=0;i<30;i++)
{
strcpy_s(Alarm[i],strlen(Alarm[i]),(LPSTR)(LPCTSTR)(g_snmpvaluelist->g_snmpvalue[i].Value));//这里如果不用strcpy_s 函数,直接用“=”,指针传回的值为空。
if(Alarm[i]=="")
{
err= 123;//数据转换错误
break;
}
}
动态库里只这里改变了指针的值。求解!

解决方案 »

  1.   

    "(LPSTR)(LPCTSTR)(g_snmpvaluelist->g_snmpvalue[i].Value)"
    g_snmpvalue[i].Value 是什么 ?CString ?
      

  2.   

    (LPSTR)(LPCTSTR) 不是 双星 指针。 
    你说的是 哪个?
      

  3.   

    g_snmpvalue[i].Value 是CString ?
      

  4.   

    但我 Alarm[i],也不是双星指针。
      

  5.   

    GetCh((LPSTR)(LPCTSTR)strIP,(LPSTR)(LPCTSTR)m_tdh,str);
    这个 str是 ** ?GetCh 也没用到
      

  6.   

    呵呵,问题解决了。
    原来动态库中strcpy_s(Alarm[i],strlen(Alarm[i]),(LPSTR)(LPCTSTR)(g_snmpvaluelist->g_snmpvalue[i].Value));这个函数中的strlen(Alarm[i]) 改变了指针的长度。所以delete时出错了。
      

  7.   

    GetCh 就是动态库中的函数。函数定义时str是**。 谢谢你的回答!