#include <iostream>
using namespace std;
char *CopyOf(const char *str);
void main(void)
{
char *hello = CopyOf("Hello\n");
cout << hello;
delete [] hello;
system("pause");
}
char *CopyOf(const char *str)
{
char *copy = new char(strlen(str) + 1);
strcpy(copy, str);
return copy;
}
程序运行到delete语句时发生错误。有什么建议吗? 非常感谢你。
答案 0 :(得分:6)
你应该分配一个char
的数组,如下所示:
char *CopyOf(const char *str)
{
char *copy = new char[strlen(str) + 1];
strcpy(copy, str);
return copy;
}
请注意,我使用了括号,而不是括号。您使用括号进行的操作是使用值char
初始化单个新strlen(str) + 1
。然后通过调用strcpy
来覆盖1字节缓冲区。你应该强烈考虑使用std::string
;它会让你免受很多C心痛的困扰。
另外,要编译代码,必须添加#include <cstring>
。最后,main()
的返回类型应为int
。
答案 1 :(得分:2)
更改此声明
char *copy = new char(strlen(str) + 1);
到
char *copy = new char[strlen(str) + 1];
考虑到您必须包含标题<cstring>
和<cstdlib>
,并且该函数main必须包含返回类型int