+ -
当前位置:首页 → 问答吧 → 关于构造函数中的异常处理

关于构造函数中的异常处理

时间:2011-11-29

来源:互联网

Vector::Vector(int m):dim(m)
{
  std::cout<<dim<<std::endl;
  vec_double=0;
  try {
  vec_double=new double[m];
  }
  catch(bad_alloc){
  delete [] vec_double;
  std::cout<<"bad_alloc"<<std::endl;
  throw;
  }
  for (int i=0; i<m; ++i)
  {
  *(vec_double+i)=0;
  }
} //Vector的一个构造函数

int main(int argc,char **argv)
{
  //Vector vec1;
  //std::cout<<vec1.get_dim()<<std::endl;
  Vector *pvec;
  try{
  pvec=new Vector(1000*1000*1000); //因为构造函数一开始有输出 故此处输出1000000000
  }
  catch(std::bad_alloc){
  std::cout<<“bad_alloc”<<pvec->get_dim()<<std::endl; //此处输出的是bad_alloc -1075921032  
  //为什么不是1000000000
  //在构造函数的异常处理中只delete了vec_double,并没有处理dim
  }
  double *pp=pvec->get_vec();
  std::cout<<pvec->get_dim()<<" "<<*(pp+3)<<std::endl;
}


//还有一个问题就是如果1000*1000*1000改为了1024*1024*1024 则输出了构造函数中的那个数以后
直接就段错误,不会输出bad_alloc,也就是没有运行到catch 难道是抛出了其他异常?

个人对于构造函数中的内存分配失败该怎么处理不是特别清楚,找过一些帖子用的是我上面那样处理,请教各位大神

作者: fs_you   发布时间: 2011-11-29

段错误就是内存乱了,楼主的栈溢出了

作者: quwei197874   发布时间: 2011-11-29