C ++中动态分配的错误

时间:2014-07-10 15:06:32

标签: c++ memory-management

#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语句时发生错误。有什么建议吗? 非常感谢你。

2 个答案:

答案 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