簡體   English   中英

C ++中的指針和刪除

[英]Pointer and delete in 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檢測到應用程序在堆緩沖區結束后寫入內存”。 提前致謝。

您給p1 1個新字符

char *p1 = new char;

但是你嘗試寫4

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

您正在寫不屬於您的內存。

做:

char *p1 = new char[4];

然后按以下方式刪除:

delete[] p1;

您沒有在“ p1的末尾”分配足夠的字節。 具體來說,您僅分配一個字節,而是將4個字節復制到該位置。 因此,您將超出分配的空間寫入3個字節。

而是將p1分配為:

char *p1 = new char[4];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM