我试图为char指针和使用delete运算符做一个例子。代码很简单:
char name[] = "subject";
char *nameptr = name;
cout <<"&nameptr: " <<&nameptr<< endl;
delete [] nameptr;
我一直收到这个错误:
*** glibc detected *** free(): invalid pointer: 0xbf9e4194 ***
我知道nameptr从输出中指出位置0xbf9e4184。 没有指针指向该位置(0xbf9e4194)。 我相信这与我使用删除有关,但我无法理解。
答案 0 :(得分:3)
您应该分别在分配有delete
或delete []
的内存上拨打new
或new []
。没有必要释放像"subject"
这样的字符串文字。
答案 1 :(得分:3)
按语句检查您的代码声明:
这里有一个包含“subject”的字符数组:
char name[] = "subject";
在这里定义一个指针,指向前面提到的数组:
char *nameptr = name;
此处您delete[]
使用new[]
分配 的内容(事实上,name
不是使用new[]
分配,您没有写:char * name = new char[...]
):
delete [] nameptr;
因此,检测到错误(正确),因为您尝试使用new
(或malloc
)释放未在堆上分配的内容。