用C ++指针和删除

时间:2013-12-17 07:33:41

标签: c++ winapi visual-c++

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检测到应用程序在堆缓冲区结束后写入内存”。 提前谢谢。

2 个答案:

答案 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];