当前位置: 代码迷 >> C++ >> detected wrote memory end of heap解决方案
  详细解决方案

detected wrote memory end of heap解决方案

热度:8792   发布时间:2013-02-26 00:00:00.0
detected wrote memory end of heap

请大家看看这段代码删除重复的字符串的有什么问题吗?为什么总是报错呢?
我看是memset不应该清零。去掉确实又ok了。谁能解释下嘛?谢谢。

void delDup()
{
char *dd = new char[strlen(s1)+1];
memset(dd,0,strlen(dd));
char *d2 = dd;
char *ss1 = s1;

while(*ss1)
{
char *d1 = dd;
while(*d1)
{
if(*ss1 == *d1)
{
d1 = NULL;
break;
}
d1++;
}
if(d1)
{
*d2++=*ss1;
}
ss1++;
}

d2 = dd;
while(*d2)
d2++;
*d2='\0';
int z = strlen(dd);
s2 = new char[z+1];
strcpy(s2,dd);

delete[] dd;
};

------解决方案--------------------------------------------------------
开头部分就有问题. 

char *dd = new char[strlen(s1)+1];
//strlen(dd)错了. dd刚刚分配, 未初始化, strlen期望传入一个'\0'结尾的字符串, 否则....
//另外, 最好把strlen(s1)记录下来, menset(dd, 0, size+1), 最好一个byte也要置0
memset(dd,0,strlen(dd)); 
  相关解决方案