[求助]:还是关于内存动态分配和释放的问题~!
[求助]:还是关于内存动态分配和释放的问题~!
偶有如下的设计代码:
class myClass
{
public:
myClass();
bool myFunction();
~myClass();
private:
char * m_szMyStr;
}
myClass::myClass()
{
char *m_szMyStr=new char[256];
}
myClass::~myClass()
{
delete [] m_szMyStr;
}
bool myClass::myFunction()
{
char * pStr=new char[256];
......//此处 pStr得到了一个已知的字符串
//如使用 GetModuleFileName(NULL,pStr,256);
//现在偶想给 类数据成员赋值为 pStr;结果如下方法都不可行。
//方法一:
for(unsigned int i=0;i<256;i++)
if(pStr[i]=='\0')
m_szMyStr[i]=pStr[i]; //出现错误,无法访问内存 C0000005
//方法二: 出现错误,无法访问内存 C0000005
strcpy(m_szMyStr,pStr);
//方法三:
m_szMyStr=pStr; //如果使用这个,会内存泄漏
//如果使用方法三,就不能 delete pStr了。
delete []pStr;
//请问,这种思路忽略了什么?为何会无法访问内存呢?偶感觉好像是无法访问类的数据成员 m_szMyStr 。究竟这样写,问题出在哪里?
}
问题点数:10、回复次数:9Top
1 楼zzstephen(渣渣)回复于 2006-06-03 00:08:38 得分 0
你这里写错了吧?重新又定义了一个局部变量
myClass::myClass()
{
char *m_szMyStr=new char[256];
}Top
2 楼A_B_C_ABC(黄瓜@YouCanDoIt)回复于 2006-06-03 01:57:52 得分 0
修改构造函数
myClass::myClass()
{ //char *m_szMyStr=new char[256];
m_szMyStr=new char[256];
}
//方法一:
for(unsigned int i=0;i<256;i++)
{
m_szMyStr[i]=pStr[i];
if(pStr[i]=='\0') break;
}
delete []pStr;
//方法二:
strcpy(m_szMyStr,pStr);
delete []pStr;
//方法三:
delete []m_szMyStr;
m_szMyStr=pStr;
Top
3 楼Bruce_Song(自强不息)回复于 2006-06-03 08:38:11 得分 0
楼上正解,方法三pStr不需要删除.Top
4 楼MagicCarmack(MagiC++)回复于 2006-06-03 10:09:17 得分 0
补充一点就是class完了之后是有分号滴。。。。哈哈Top
5 楼realorg()回复于 2006-06-03 18:26:11 得分 0
那A_B_C_ABC(黄瓜) 说的方法三中,还会不会泄漏内存呢?Top
6 楼yxsxl827()回复于 2006-06-03 19:14:10 得分 0
LZ可以考虑是否用深拷贝呢????Top
7 楼Bruce_Song(自强不息)回复于 2006-06-03 19:56:58 得分 0
回复人:realorg()
那A_B_C_ABC(黄瓜) 说的方法三中,还会不会泄漏内存呢?
不会。Top
8 楼yzhg_cgl(Little Fish)回复于 2006-06-08 00:51:55 得分 0
分清局部变量与类的成员。Top
9 楼zzzace(怀念以前的小吃)回复于 2006-06-08 11:28:31 得分 0
没什么可说的了,嘿嘿,路过
Top




