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;
}
Выше мой тестовый проект. Как я могу удалить новую память символов? Я всегда получаю сообщение "HEAP CORRUPTION DETECTED error... CRT обнаружил, что приложение записано в память после окончания кучного буфера". Заранее спасибо.
Вы даете p1 1 новый символ
char *p1 = new char;
но вы пытаетесь написать 4
while(s-->0)
*pt++ = *po++;
Вы пишете в память, которой у вас нет.
Делать:
char *p1 = new char[4];
Затем удалите:
delete[] p1;
printf
), необходимо либо выделить 5 символов (еще один для нулевого терминатора), либо скопировать только 3 символа и использовать четвертый для нулевого терминатора. В любом случае, нулевой терминатор не требуется.
вы не выделяете достаточное количество байтов "в конце" p1. В частности, вы выделяете только один байт, но копируете 4 байта в местоположение. Следовательно, вы пишете 3 байта за выделенное пространство.
Вместо этого выделите p1 как:
char *p1 = new char[4];