C 新/删除和char *
c++ new/delete and char *
任何人都可以帮我吗,为什么我在试图释放分配的内存时收到错误消息:检测到的堆损坏。CTR检测到该应用程序在堆缓冲区结束后编写了内存。
char *ff (char *s){
char *s1 = new char [strlen(s)];
strcpy(s1, s);
return s1;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *s = new char [5];
strcpy(s, "hello");
char *s2 = ff(s);
delete []s; // This works normal
delete []s2; // But I get an error on that line
return 0;
}
char *s = new char [5];
strcpy(s, "hello");
原因未定义的行为(UB)。
您的写作超出了分配的模因的范围。您为5
字符分配了足够的内存,但是您的字符串具有6
字符,包括