字符串处理 内存错误 堆被损坏
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里面有没有虚拟函数?如果有,你这样做肯定不行