void *mm(void *pTo,void*pOr,size_t s)
{
assert((pTo)&&(pOr));
char* pt = (char*)pTo;
char* po = (char*)pOr;
while(s-->0)
*pt++ = *po++;
return pTo;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *p1 = new char;
char *p2 = "permutation";
p1 = (char *)mm(p1,p2,4);
printf(p1);
//delete p1;
return 0;
}
以上是我的测试项目。如何删除新的char内存? 我总是得到“HEAP CORRUPTION DETECTED错误...... CRT检测到应用程序在堆缓冲区结束后写入内存”。 提前谢谢。
答案 0 :(得分:3)
你给p1 1个新的字符
char *p1 = new char;
但你试着写4
while(s-->0)
*pt++ = *po++;
你写的是你不拥有的记忆。
执行:
char *p1 = new char[4];
然后删除:
delete[] p1;
答案 1 :(得分:0)
你没有在“p1”末尾分配足够的字节。具体来说,您只分配一个字节,但将4个字节复制到该位置。因此,您在分配的空间之外写入3个字节。
而是将p1分配为:
char *p1 = new char[4];