首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ delete释放内存有有关问题,请高手帮忙找原因

2012-02-29 
C++delete释放内存有问题,请高手帮忙找原因!错误现象:经过单步调试,发现当程序执行完后,tstring sstr(10,

C++ delete释放内存有问题,请高手帮忙找原因!
错误现象:经过单步调试,发现当程序执行完后,tstring sstr(10,'c')对象能够正常释放内存,但是tstring tstr("i love you");却无法释放内存。跟踪时,发现当tstr对象析构时,无法delete[] m_str。请教各位,这是为什么?? 
源码如下:
tstring.h

#ifndef TSTRING_H
#define TSTRING_H

#include "stdafx.h"

class tstring
{
public:
tstring();
tstring(const char* str );
tstring(int len ,char ch );
~tstring();
void printStr();
void clearStr();
private:
char* m_str;
};

#endif

tstring.cpp

#include "tstring.h"

tstring::tstring()
{
m_str = NULL;
}

tstring::tstring(const char* str):m_str(NULL)
{
int len = sizeof(str);
//clearStr();
if(m_str)
delete m_str;
m_str = NULL;
m_str = new char[len + 3];
memset(m_str,'\0',sizeof(m_str));
strcpy(m_str,str);
}

tstring::tstring(int len,char ch):m_str(NULL)
{
int i=0;
clearStr();
m_str = new char[len + 1];
for(i=0; i < len; i++)
{
m_str[i] = ch;
}
m_str[i] = '\0';
}

void tstring::printStr()
{
cout<<m_str<<endl;
}

void tstring::clearStr()
{
if(m_str)
delete[] m_str;
m_str = NULL;
}

tstring::~tstring()
{
clearStr();
}

main.cpp
//#include "stdafx.h"
#include "tstring.h"

int _tmain(int argc, _TCHAR* argv[])
{
tstring tstr("i love you");
tstr.printStr();

tstring sstr(10,'c');
sstr.printStr();

return 0;
}



[解决办法]
tstring::tstring(const char* str):m_str(NULL)
{
int len = sizeof(str);
//clearStr();
if(m_str)
delete m_str;
m_str = NULL;
m_str = new char[len + 3];
memset(m_str,'\0',sizeof(m_str));
strcpy(m_str,str);
}


函数写错了

sizeof求出来 不是字符串长度


[解决办法]
计算字符串长度用strlen,sizeof算出来的是指针的长度,也就是4,你的程序访问非法内存了
[解决办法]
tstring::tstring(const char* str):m_str(NULL)
{
if(str==NULL)
return;

int len = strlen(str)+1;

m_str = new char[len];
memcpy(m_str, str,len);
}

试试









探讨

tstring::tstring(const char* str):m_str(NULL)
{
int len = sizeof(str);
//clearStr();
if(m_str)
delete m_str;
m_str = NULL;
m_str = new char[len + 3];
memset(m_str,'\0',sizeof(m_str));
strcpy……

热点排行