首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

字符串处理 内存异常 堆被损坏

2013-11-12 
字符串处理 内存错误 堆被损坏void FindThread(){testfile(D:\\html\\default.txt)for (int i 0 i

字符串处理 内存错误 堆被损坏

void FindThread()
{
testfile("D:\\html\\default.txt");
for (int i = 0; i < htmlParser.getHtmlNodeCount(); i++)
{
HtmlNode *find=htmlParser.getHtmlNode(i);
if (find->text==NULL)
{
continue;
}
else
{
char *BeginFind=NULL;
char *IsFindHref=NULL;
char *IsFindSrc=NULL;
char *Filename=NULL;
char *Sendname=NULL;
char *TempPoint=NULL;
BeginFind=find->text;
do
{
IsFindSrc=FindSrc(BeginFind);                                                       
if (IsFindSrc!=NULL)
   {
   PUrlStr PNode=new UrlStr;
   memset(PNode,0,sizeof(UrlStr));
   Filename=Change(IsFindSrc);
   Sendname=SendStr(IsFindSrc);
   PNode->UrlString=Sendname;
   PNode->FileName=Filename;
   PNode->next=PUrlHead->next;
   PUrlHead->next=PNode;
 // delete []IsFindSrc;
 //  IsFindSrc=NULL;
   }
 }while (IsFindSrc); 

 BeginFind=find->text;
 do
 {
 IsFindHref=FindHref(BeginFind);
if (IsFindHref!=NULL)
     {   
   PUrlStr PNode=new UrlStr;
   memset(PNode,0,sizeof(UrlStr));
   Filename=Change(IsFindHref);
   Sendname=SendStr(IsFindHref);
   PNode->UrlString=Sendname;
   PNode->FileName=Filename;
   PNode->next=PUrlHead->next;
   PUrlHead->next=PNode;
  //   delete []IsFindHref;
  // IsFindHref=NULL;
     }
 } while (IsFindHref);                                                          
}
}
}

char * FindSrc(char * Desk)                      //寻找第一个关键字Src
{
 char *p=strstr(Desk,"src="");
if (p==NULL)
{
return NULL;
}
else

p=p+5;
char *q=strstr(p,""");
char *m=new char[MAX_URL_LEN];
if (m==NULL)
{
return NULL;
}
memset(m,0,MAX_URL_LEN);
strncpy(m,p,q-p);
Desk=q;
return m;
}
}

char * FindHref(char * Desk)                          // 寻找第二个关键字 href
{
char *p=strstr(Desk,"href="");
if (p==NULL)
{
return NULL;
}
else

p=p+6;
char *q=strstr(p,""");
char *m=new char[MAX_URL_LEN];
if (m==NULL)
{
return NULL;
}
memset(m,0,MAX_URL_LEN);
strncpy(m,p,q-p);
Desk=q;
if('#'==*m)                                                                                   // html   href="#"; 锚点设置
return NULL;
return m;
}
}

当进行到char *m=new char[MAX_URL_LEN]; 就出现断点。 堆被损坏  求解释
[解决办法]
前面的操作破坏了堆的数据了,看你使用了许多的memset,应该在那个地方弄错了
[解决办法]
比如UrlStr里面有没有虚拟函数?如果有,你这样做肯定不行

热点排行