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

一段有疑问的代码。在VC++6.0上运行到Delete就是出错

2013-01-06 
一段有疑问的代码。在VC++6.0下运行到Delete就是出错。#include iostream.h#include string.hclass word

一段有疑问的代码。在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

热点排行