【问题标题】:Error in dynamic allocation in C++ [closed]C ++中的动态分配错误[关闭]
【发布时间】:2014-09-01 00:51:39
【问题描述】:
#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 语句时。有什么建议吗? 非常感谢。

【问题讨论】:

  • 你正在分配一个char
  • My error occurs when the program runs into delete statement。不,您的错误发生在调用strcpy 时。这是发生在代码中代码崩溃之前的某个位置的内存损坏的主要示例。
  • 你怎么知道有错误?您确实没有将其包含在您的问题中。你有编译器错误吗?运行时崩溃?描述你的结果!
  • RE:“我的问题已解决编辑” 工作流程是您可以通过勾选您认为对您最有帮助的答案来接受答案。为什么你会想要是另一个问题,反对票的欢迎并不那么热烈。但是……假装它们不存在,积分是假的,只是吸收信息。 :-)
  • 我无法为您的答案投票,因为我没有足够的声誉。对不起

标签: c++ memory-management


【解决方案1】:

你应该分配一个chars 的数组,像这样:

char *CopyOf(const char *str)
{
    char *copy = new char[strlen(str) + 1];
    strcpy(copy, str);
    return copy;
}

请注意,我使用了方括号,而不是圆括号。你用括号做的是用值strlen(str) + 1初始化一个单个新的char。然后你调用strcpy 覆盖了1 字节缓冲区。您应该强烈考虑使用std::string;它会让你免于很多这种 C 的心痛。

另外,要编译您的代码,您必须添加#include &lt;cstring&gt;。最后,main() 的返回类型应该是 int

【讨论】:

  • 谢谢。很多有用的信息。
【解决方案2】:

更改此语句

char *copy = new char(strlen(str) + 1);

char *copy = new char[strlen(str) + 1];

考虑到您必须包含标题 &lt;cstring&gt;&lt;cstdlib&gt; 并且函数 main 必须具有返回类型 int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多