2010-06-28 574 views
1

我有一个声明为const char *的变量。我已经为使用malloc()分配了内存。使用它之后,我想使用free()释放内存。但我无法做到这一点,它给我错误的是“尝试写入受保护的内存”。我如何释放分配的内存?在C++中为const char *变量释放内存

谢谢, Rakesh。

+5

请发布编码。如果你用'malloc'分配内存(尽管你为什么要用C++),那么你必须用'free'释放内存。如果这不起作用,你所做的细节就会出错。 – 2010-06-28 07:18:38

+1

发布代码,但我很肯定你需要找到一个更好的方法来做到这一点(没有必要在C++中使用malloc ..你应该真的用C++方式) – 2010-06-28 07:21:03

+1

这有一个'C++'标签。你不应该在C++程序中使用'malloc()'和'free()'。另外,正如[paxdiablo的答案](http://stackoverflow.com/3130720#3130720)所示,这种方法很好,除非你做错了什么。为了让我们看到你做错了什么,你需要发布实际再现的代码。 – sbi 2010-06-28 07:35:53

回答

3

如果你得到那个错误,那么你做错了什么,你需要发布代码,所以我们可以弄清楚它是什么。对于它的价值,你可以释放一个const char*如下面的代码,编译和完美的执行证明:

#include <cstdlib> 
int main (void) { 
    const char *x = (const char*) malloc (100); 
    free ((void*) x); 
    return 0; 
} 
+0

我想在'free()'中强制转换是因为函数需要一个非const'void *'?因为'char *'隐式转换为'void *'。 (而'const char *'为'const void *'。)但是,将分配结果存储为'const T *'无论如何都不会有太大意义,因为您无法以这种方式更改分配的内存。如果它是'char *'(而不是'const char *'),那么这段代码只需要少一次强制转换。当然,所有这些都是在C++中使用'malloc()'和'free()'的时候...... – sbi 2010-06-30 23:25:46

1

使用它

让我猜猜之后,这算什么你做到了?

const char* p = malloc(12); 
p = "hello world";   // problem: memory leak 
free(p);      // problem: trying to free static memory 

你应该strcpy(p, "hello world");或类似的东西来摆脱这个问题的替代第二行。但是由于你没有提供任何代码,我不打算深入探讨这个问题。