【问题标题】:Deleting Char* after assigning it to a String Variable [duplicate]将 Char* 分配给字符串变量后删除它 [重复]
【发布时间】:2013-03-08 21:46:46
【问题描述】:

我已经执行了下面的代码,它运行良好。因为它是关于指针的,我只是想确定一下。虽然我确信将 char* 分配给 string 会产生副本,即使我删除 char* , string var 也会保留该值。

#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>

int main(){
    std::string testStr = "whats up ...";
    int strlen = testStr.length();
    char* newCharP = new char[strlen+1];
    memset(newCharP,'\0',strlen+1);
    memcpy(newCharP,testStr.c_str(),strlen);

    std::cout << "  :11111111   :   " << newCharP << "\n";
    std::string newStr = newCharP ;

    std::cout << "  2222222 : " << newStr << "\n";
    delete[] newCharP;
    newCharP = NULL;

    std::cout << "  3333333 : " << newStr << "\n";
}

我只是在我的公司项目中更改了一些代码,并且 char* 在 C++ 中的函数之间传递。 char* 指针已复制到字符串,但 char* 在函数末尾被删除。我找不到任何具体的原因。所以我只是删除 char* ,只要它被复制到一个字符串中。这会有什么问题吗..?

【问题讨论】:

  • 老实说,这并不是一个真正的代码审查问题。我想说这个问题最好放在 StackOverflow.com 上。
  • @OJ。你能把这个问题移到stackoverflow吗? .我想既然是代码检查,我可以在这里发布。
  • @ManikandarajS 我同意 OJ。您将其表述为代码审查请求,但这里仍有一个非常具体的问题(即:“在创建 std::string 后删除字符数组是否安全?”)并且您发布的代码只是一个示例来说明这个问题。所以在我看来,这个问题非常适合 Stack Overflow。我现在把它移到那里。
  • 我已经将其标记为关闭。我不知道如何将问题迁移到 SO。

标签: c++ string


【解决方案1】:

当您将 C 样式字符串(char 的数组)分配给 std::string 时。重载的赋值将该 C 风格的字符串复制到 std::string

std::string newStr = newCharP;

此分配后,newCharP 的所有字符都复制到newStr。然后你就可以安全地deletenewCharP了。

【讨论】:

  • 他在 4 小时前问过这个问题 - 并得到了答案。
  • @Aniket:这个答案还告诉你为什么它有效。
【解决方案2】:

在创建 std::string 后删除 char 数组安全吗?

是的

【讨论】:

    猜你喜欢
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    相关资源
    最近更新 更多