[英]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.