请问char*转CString后怎么释放!多谢

请教char*转CString后如何释放!谢谢
我是个烂写java的,C++对我来说真是噩梦啊,有这么一段代码:

char* data = new char[8];
recv(socket,data,8,0);
CString str = data;
或者 CString str(data);

然后这个data该在哪里释放呢?
我在紧接着下面释放:
delete[] data;报错了。

大家来救救我啊 谢谢!


------解决方案--------------------
这样写
char* data = new char[9];
memset(data,0,9);
recv(socket,data,8,0);
后面的不用改,要额外留一个字符给\0

问题2:可以
------解决方案--------------------
不用的地方释放就可以了.
------解决方案--------------------
CString str = data;
或者 CString str(data);
这两种方法都是对串进行的复制的,并不是CString直接就使用你分配的内存.
所以你的释放是没有问题,只是在释放前你对data存在访问越界吧,提示的错误应该是堆被破坏之类的.

对于类对象(结构体相同)的返回,会调用拷贝构造函数,实际上的操作是用你在函数里的对象a来构造了一个新对象p,然后a的生命周期到了,就被析构掉了.便于理解的话,你可以把对象a想像成一个整型变量
------解决方案--------------------
接收的数据最好不要转换为CString 来处理
因为接收的数据中有可能是 0
分配了 8个字节 char *recvBuf = new char[8]; 
而你初始化memset(recvBuf,0,9); 9 个字节能不报错吗
改为
char *recvBuf = new char[9]; 
另外
CString dataLenStr(recvBuf);
 delete [] recvBuf;
改为
CString dataLenStr(recvBuf,8);
 delete [] recvBuf;