2013-12-17 111 views
0
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 error ... CRT檢測到應用程序在堆緩衝區結束後寫入內存」。 在此先感謝。指針和刪除C++

+0

最好不要甚至稱新的或刪除。使用std :: vector來保存動態大小的內存。 –

回答

3

你給P1 1新字符

char *p1 = new char;

,但你嘗試寫4

while(s-->0) 
     *pt++ = *po++; 

你寫入內存你不擁有。

務必:

char *p1 = new char[4];

然後刪除由:

delete[] p1;

+0

非常感謝。 – Gent

+0

由於生成的指針稍後被解釋爲一個字符串(通過'printf'),所以需要分配5個字符(一個用於零終止符)或僅複製3個字符,並使用第四個作爲零終止符。在任何情況下,都需要零終止符。 – AnT

+0

這就是'delete [] p1',而不是'delete p1 []'。 – AnT

0

您沒有在「p1」末尾分配足夠的字節。具體而言,您只分配一個字節,但將4個字節複製到該位置。因此,你在分配的空間之外寫入3個字節。

而是分配P1爲:

char *p1 = new char[4];