CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

请问这个代码在VC6下运行就出错,在DEVCPP下就正常?谢谢

楼主yqzq(花心萝卜)2005-02-22 11:06:34 在 C/C++ / C++ 语言 提问

//头文件  
   
  #include   "stdlib.h"  
   
   
  template   <class   T>  
   
  class   CArray{  
   
  private:  
  T   *   m_arr;  
  int   size;  
   
  public:  
  CArray(int   s){  
  m_arr=new   T(s); //根据参数构造数组  
  size=s;  
  }  
   
  ~CArray(){  
  delete[]   m_arr; //释放内存  
  }  
   
   
  T   &   operator   [](int   ind){ //重载下标运算符  
  if(size   <   ind){  
  cerr<<"out   of   size!"<<endl;  
  exit(1);  
  }  
  else  
  return   m_arr[ind];  
  };  
   
  int   getsize(){return   size;}; //返回数组大小  
   
   
   
   
  };  
   
   
   
   
  //main.cpp  
   
  #include   <iostream.h>  
  #include   "Array.h"  
   
   
   
  int   main(){  
   
  CArray<long>   aa(3);  
  aa[1]=100;  
  aa[2]=200;  
   
  cout<<"size:"<<aa.getsize()<<endl;    
  for(int   i=0;i<aa.getsize()   ;i++){  
   
  cout<<aa[i]<<endl;  
  }  
   
  return   0;  
  }  
   
   
   
   
  谢谢 问题点数:20、回复次数:5Top

1 楼goodname(叶落知秋)回复于 2005-02-22 11:10:44 得分 8

m_arr=new   T(s); //根据参数构造数组  
   
  这个地方好像不是new出来的数组吧?Top

2 楼blueskyzsz(青禾)回复于 2005-02-22 11:19:12 得分 6

楼上说得对,你不能保证传进来的模板参数能通过下面的操作new出数组来  
  m_arr=new   T(s)  
  你实例化类模板的时候,其实传进来的类型是long  
  所以你的这句话就演绎成了  
  m_arr   =   new   long(s);  
    size=s;  
  只是new了一个long变量,你保存的size也是错的Top

3 楼goodname(叶落知秋)回复于 2005-02-22 11:27:00 得分 6

vc调试的时候是因为,在debug模式下有个  
  #define   new   DEBUG_NEW  
  (好像是)  
  这一句把程序里面的new都改作了调试版本的了,  
  此时new出来的一段内存,前后都有调试字符填充,所以,  
  调试状态下,如果非法内存访问,就会出  
  断言失败,会跳出对话框来。  
  而dev-cpp则没有,而且c/c++又不检查数组是否越界。  
   
  你的程序只是new了一个实例,并且用s初始化,仅此而已。Top

4 楼yqzq(花心萝卜)回复于 2005-02-22 11:41:37 得分 0

唉!!大意了!大意了!  
  多谢各位!  
   
  散分Top

5 楼xboss(丑陋的代码)回复于 2005-02-23 16:25:19 得分 0

56eTop

相关问题

  • 代码出错
  • vc下window编程出错,up有分,晚上结,附代码
  • VC6代码升级到VC++.Net后出错(C2440)
  • ado 操作出错代码
  • 代码出错,求救
  • 载文件代码出错
  • 一段出错C代码
  • 一段C代码,用VC编译出错~~~~~应该怎么设置VC才能顺利的编译C代码呢??
  • 在VC下调用ADO的RecordSet的AddNew方法老出错,代码如下,请高手指点!
  • 在vc调试时如果定位到内存溢出或者断言出错的代码处?

关键词

  • carray
  • arr
  • aa
  • size
  • include

得分解答快速导航

  • 帖主:yqzq
  • goodname
  • blueskyzsz
  • goodname

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo