【发布时间】:2011-12-12 04:19:05
【问题描述】:
我的 C++ 程序有错误:
#include<iostream>
using namespace std;
char* foo()
{
char * mystr = new char[6];
mystr = "Hello";
return mystr ;
}
int main()
{
char* myString =foo();
printf("%s \n", myString);
delete [] myString ;
}
==27472== Invalid free() / delete / delete[]
==27472== at 0x4A07A12: operator delete[](void*) (vg_replace_malloc.c:409)
==27472== by 0x4007EB: main (printHello.cpp:16)
==27472== Address 0x4008f8 is not stack'd, malloc'd or (recently) free'd
如果我删除 delete [] myString ; 效果很好。
我应该释放堆上分配的内存,对吗?
但是,为什么我会出错,如果我删除它。
谢谢
【问题讨论】:
-
在 C/C++ 中,您不能使用 '=' 运算符为 char 数组赋值,您必须使用 strcpy(或更好的 strncpy)。 C++ 还引入了 std::string 类,它可以很好地完成这项工作。
标签: c++ linux memory memory-leaks