一段有疑问的代码。在VC++6.0下运行到Delete就是出错。
#include <iostream.h>
#include <string.h>
class word
{
char *str;
public:
word( char *s)
{ str=new char[strlen(s)+1];
strcpy( str,s );
}
char &operator[](int k)
{ return *(str+k); }
void disp()
{ cout<<str<<endl; }
~word()
{
delete str;
}
};
void main()
{
char *s="china";
word w(s);
w.disp();
int n=strlen(s);
while (n>=0)
{
w[n-1]=w[n-1]-32;
n--;
}
w.disp();
}
以上一段代码。在VC++6.0下运行到Delete就是出错。有安装VC++6.0的可以试着调试一下,到delete的地方就出错了。换成delete []str也一样。没有这一段程序就可以运行过去,但是,有new的地方,不是就应该要delete吗?不然就内存泄漏了。求答疑。
[解决办法]
while (n>=0)
{
w[n-1]=w[n-1]-32;
n--;
}
哥了,你让n=0时怎么过啊?
[解决办法]
delete[] str;
[解决办法]
while (n >= 1/*0*/)
{
w[n-1] = w[n-1] - 32;
n--;
}
当n = 0的候,w[-1]已经操作内存了吧。
[解决办法]
当n = 0的候,w[-1]已经非法操作内存了吧。
另外要用
delete [] str;
delete/new、delete []/new []要配对使用。
[解决办法]
你有自己的构造函数,就一定要再写一个默认构造函数,另外你while循环中当n=0时候会非法操作内存,另外你的delete [] str