尝试取消分配此指针时遇到了严重问题。
我遇到了这个错误:
对象0x10007fd20的错误:未分配的指针
我有以下结构:
char * doSomething() //I cannot change this method.
{
return "hello world";
};
int main ()
{
char * var= doSomething();
cout<< var<<endl;
delete[] var;
};
请注意我不能使用字符串,因为我没有收到doSomething method
。因为我使用它很多..一段时间后应用程序因RAM内存使用而崩溃。
答案 0 :(得分:4)
您正在尝试delete[]
一个静态字符串。您只想使用delete[]
创建的new[]
个对象。
答案 1 :(得分:1)
您只能删除使用相应operator new
分配的内容。字符串文字具有静态存储持续时间。它们不是动态分配的。根据C ++标准
8也引用普通的字符串文字和UTF-8字符串文字 作为窄字符串文字。窄字符串文字的类型为“数组” of n const char“,其中n是下面定义的字符串的大小, 并且具有静态存储持续时间(3.7)。
答案 2 :(得分:0)
我发现了多个潜在问题:
delete[]
,错误,这就是您收到错误的原因char*
,这已被弃用并且不安全(因为您无法修改字符串文字)你正在返回一个指向局部变量的指针,在你的情况下这是允许的,因为你正在使用字符串文字,但一般来说
int *function() { int x = 10; return &x; }
永远不应该这样做,如果你返回一个指向函数中某个东西的指针,请确保它是动态分配或静态分配但不在堆栈上分配。
答案 3 :(得分:0)
在我看来,字符串文字就像&#34; Hello world&#34;存储在程序的静态部分而不是堆栈中。这意味着,只有一个&#34; Hello world&#34;在内存中,无论你调用多少次函数。那些调用应该返回相同的地址。您的程序的RAM问题不是由此问题引起的。