gpt4 book ai didi

c++ - 检查是否可以释放指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:20 27 4
gpt4 key购买 nike

我找遍了这个问题的答案,但似乎找不到。 (我对 C++ 的经验相当有限)

在我的库中,我释放了一个字符串。 (太棒了,是吧?)

这就是问题所在。我有一个包含 char* 的结构,它可能分配在堆上,也可能不分配。虽然它是一个有效的指针,但它不能被释放。

浏览器

char* s1 = "A String";
char* s2 = (char*)memcpy(malloc(9), s1, 9);

free(s2);
free(s1);

将导致“free(s1);”错误(正如它应该)因为 s1 实际上并不需要 被释放,(它不在堆上)我怎样才能以“可接受”的方式处理这个问题? (在类似的主题上,“让它崩溃”的答案在我看来并不合理)

因为结构不是由库单独创建的,所以无法保证使用 memcpy 之类的东西可以正确复制字符串。

因为这是一个 Windows 库,所以我不需要担心使用 ISO C 的东西或标准的 C 函数。

最佳答案

在 C++ 中,您根本不应该为此担心。使用 std::string 并让它自动为您管理内存。 Don't manage memory manually.

如果您要手动执行此操作,则需要自己管理资源,通过

  • 让库的用户自己管理内存,或者
  • 要求用户告诉你如何管理内存,或者
  • 告诉用户您将如何管理内存,然后期望用户遵守。

关于c++ - 检查是否可以释放指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4573222/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com