指定的内存位置没有指针。删除操作有什么问题?

时间:2013-12-21 23:37:31

标签: c++ pointers delete-operator

我试图为char指针和使用delete运算符做一个例子。代码很简单:

char name[] = "subject";
char *nameptr = name;
cout <<"&nameptr: " <<&nameptr<< endl;
delete [] nameptr;

我一直收到这个错误:

*** glibc detected ***  free(): invalid pointer: 0xbf9e4194 ***

我知道nameptr从输出中指出位置0xbf9e4184。 没有指针指向该位置(0xbf9e4194)。 我相信这与我使用删除有关,但我无法理解。

2 个答案:

答案 0 :(得分:3)

您应该分别在分配有deletedelete []的内存上拨打newnew []。没有必要释放像"subject"这样的字符串文字。

答案 1 :(得分:3)

按语句检查您的代码声明:

这里有一个包含“subject”的字符数组:

char name[] = "subject";

在这里定义一个指针,指向前面提到的数组:

char *nameptr = name;

此处delete[]使用new[] 分配 的内容(事实上,name 不是使用new[]分配,您没有写:char * name = new char[...]):

delete [] nameptr;

因此,检测到错误(正确),因为您尝试使用new(或malloc)释放未在堆上分配的内容。