【问题标题】:want to know if const char* ptr leads to any memory leak,想知道 const char* ptr 是否会导致任何内存泄漏,
【发布时间】:2018-08-16 06:17:07
【问题描述】:

我是 C++ 编码的新手,想知道我是否使用const char* ptr 并执行一步,是否会出现内存泄漏。如果是,如何解决?我无法显示确切的代码,但大纲是

char letter[];
const char* lettrptr= *somefunc(argument)*;
strcpy(letter,lettrptr);

整个代码运行良好。但我怀疑const char* ptr 是否存在内存泄漏,如果是,如何解决?

【问题讨论】:

  • 你在函数调用结束时做delete吗?
  • 我最终没有做任何删除,我正在考虑使用免费但我想免费不起作用

标签: c++14


【解决方案1】:

内存泄漏并非来自使用const char * 或任何其他类型。

内存泄漏是由于不再需要内存后没有释放它。

在你的情况下,你有函数somefunc。它要么是你写的,要么是别人写的。无论如何,您必须确定该函数是否希望调用者释放内存。

由于const,该函数很可能不希望您释放内存,但为了安全起见,您还是应该检查一下。

【讨论】:

    【解决方案2】:

    视情况而定。

    somefunc() 是否为字符串分配内存?还是返回一个指向静态分配的指针?

    在第一种情况下,somefunc() 将返回对malloc()(或calloc() 或类似函数)的调用结果。如果是这种情况,则该内存可能会泄漏,因此您需要free()它。

    在第二种情况下,somefunc() 将返回一个 char*,它可以是全局静态变量,也可以是局部静态变量,如下所示:

    char global_str[] = "Hello";
    
    const char *somefuncA()
    {
      return global_str;
    }
    
    const char *somefuncB()
    {
      static char static_str[] = "World";
      return static_str;
    }
    

    如果是其中一种情况,则内存不会泄漏(并且您不得尝试free() 它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多