预约资源编号传入西门子 区域长度错误误是什么意思?

国税网络申报显示数据包长度错误是什么意思_百度知道
国税网络申报显示数据包长度错误是什么意思
我有更好的答案
可能是网络申报比较集中,造成网络拥堵或服务器超时导致授权不能回传。建议您换一个时段重新申报。
可是还是申报不了,显示无法完成网络申报操作
放心好了,不是你的问题,再试试。
采纳率:48%
1、国税网络申报显示数据包长度错误实际就是传输数据没有送达到指定服务器或指定服务器未正常反馈逻辑信息。2、原因:可能与同时访问人数多、业务量大,造成网络拥堵或服务器超时导致授权不能回传。3、建议换一个时段重新申报。如果业务紧急,请及时与主管地税机关或市局确定的软件服务商联系,寻求支持,以免耽误工作。4、非个人原因,请不要担心,不是中毒、账号被盗取等问题。
可能是网络申报比较集中,造成网络拥堵或服务器超时导致授权不能回传。建议您换一个时段重新申报。
可能是网络申报比较集中,造成网络拥堵或服务器超时导致授权不能回传。建议您换一个时段重新申报。
应该是你们的税控器到期了,该缴费了。我用的浪潮税控的就是需要缴纳年费,要不不能申报,但可以正常使用!
你是不是上传错了,你看它那里有显示上传名字与它那里显示名字是一样的才可以上传的哦。
其他3条回答
为您推荐:
其他类似问题
您可能关注的内容
数据包的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。好大夫在线是医患沟通平台,医生基于患者自述病情所发表的言论仅供参考,不能作为诊断和治疗的直接依据。
什么是病情优先制的预约挂号?病情优先制和排队优先制的区别
以往门诊的排队优先制是按照排队次序分配门诊机会,简单感冒之类的小病挂专家号,会花费专家大量时间,使他们无暇照顾那些复杂重大疾病患者,对社会医疗资源造成浪费。
病情优先制的转&诊系统,符合卫生部“推行层级诊疗”精神,把门诊机会分配给真正需要专家的重大疾病患者。患者在网上上传病情资料,只要符合专家设定的疾病范围,即可获得专家本人的门诊机会(即“转&诊”),保证专家的时间用于那些复杂重大疾病,提升社会医疗资源的利用率。
如何申请?申请流程是怎样的?
首先您需要注册一个用户名,填写患者的真实信息。申请流程:提交申请→医生本人确认→收到成功提示短信→就诊前一天确认须知,领取凭证短信→持凭证短信找医生领取转&诊单→凭转&诊单门诊挂号就诊。
为什么预约成功后, 还需要去找大夫本人?
好大夫在线病情优先制的转&诊服务与传统的预约挂号有所不同,病情优先制的转&诊服务是大夫在正常门诊挂号之外,延长门诊时间,专门为需要专家的重大疾病患者加诊,所以必须要有医生的转&诊单,挂号室才会给予门诊挂号。
如何保证我能挂上号呢?
好大夫在线的预约挂号都是医生同意并且确认给予专家本人的门诊机会(即“转&诊”),只要您按照预约规定的时间和地点正常就诊,医生都会给您预留门诊机会的。
好大夫在线的网上预约挂号服务要交钱吗?
好大夫在线提供该服务不向患者收取任何费用,医生也不从中收取任何费用,但请尊重和重视大夫提供的免费转&诊服务,否则我们将不向您提供此项服务。(请警惕以好大夫在线名义进行的收费诈骗)
可以提前多久申请?
请您至少提前3天提交17日内的申请,好大夫在线管理员仅为您安排3日之后、17日之内的网上预约挂号服务。不符合要求的申请,好大夫在线管理员会不予安排。
病情资料为什么要真实?
为杜绝“票贩子”,您必须提交真实病情资料,否则将影响您的门诊挂号。
收到申请成功短信后如何就诊?
您需要注意,申请成功短信非就诊凭证短信,在您收到申请成功的手机短信后,请您在短信提示的时间内领取凭证短信,再按照凭证短信指定的时间、地点,找专家本人(或其助理)领取转&诊单,然后到门诊挂号室挂号,按顺序等候就诊。
如何领取转&诊凭证短信?
预约成功之后,请您在就诊前两天20点至就诊前一天16点之前,登录好大夫在线网站,在网页右上方点击“我的服务”,然后找到您的相关订单,之后点击“查看详情”,在最下方点击”领取转&诊凭证“,若您不方便也可以在就诊前一天9点半至16点致电客服领取转&诊凭证短信。
为什么不能直接去挂号室?
病情优先制的转&诊服务是大夫在正常门诊挂号之外,延长门诊时间,专门为需要专家的重大疾病患者加诊,所以必须要有医生的转&诊单,挂号室才会给予门诊挂号,否则直接去挂号室您是不能转&诊的。
如何取消?
如有特殊情况不能如约就诊,必须在约定就诊时间前一天16:00之前在好大夫网站上取消预约。
什么是爽约,爽约有什么后果?
爽约即是没有按照网上规定的流程找医生就诊。
为保障极为有限的专家门诊机会不被浪费,请您务必守时就诊。如有特殊情况不能如约就诊,必须在约定就诊时间前一天16:00之前在好大夫网站上取消预约。否则一旦爽约,好大夫网站将永不再向您提供这种转&诊机会。
预约时间医生停诊怎么办?
鉴于临床工作的特殊性,医生遇到抢救、急诊等特殊事件时,有可能延后甚至取消门诊,这种情况下,您的预约将会失效,好大夫网站将在获悉后第一时间通过网站、短信发布通知,请注意接收手机短信,并在就诊前上网查看通知。
好大夫在线、医院、医生本人均不对停诊导致的预约申请失效承担任何赔偿责任,但我们将优先为您安排其他时间就诊。
就诊后为什么要进行回访?
回访主要是为了了解您的就诊情况,帮助我们改善工作流程,以便更好的为更多患者服务。
如何进行网上自助回访?
在您就诊完成之后,请登录好大夫在线网站,在网页右上方点击“我的服务”,然后找到您的相关订单,之后点击“查看详情”,在右下方点击“就诊回访“,即可进行自助回访。若您不方便也可以在9:30-19:00之间致电客服进行回访。
没收到短信怎么办?
情况1 预约成功没有收到手机短信:
中国移动、联通、电信等运营商的短信服务有可能由于不可抗力导致短信发送延迟或丢失,会导致您收不到转&诊成功等通知短信,请您及时登录好大夫在线网站查看站内信(网站左上角的信封)通知。
情况2 预约失败没有收到手机短信:
请您及时登录好大夫在线网站查看站内信(网站左上角的信封)通知。查看是否申请没有通过,核实医生预约挂号的要求,补充病情资料或者选择申请其他大夫。
申请没通过有哪些原因?
1.请您仔细阅读医生预约挂号的要求(疾病、时间、数量限制等),您是否符合条件。2.请您核实患者的注册信息,是否真实正确。3.您的申请时间是否过长或者过短(请您至少提前3天提交17日内的网上申请)。
提示:任何关于疾病的建议都不能替代执业医师的面对面诊断。所有门诊时间仅供参考,最终以医院当日公布为准。网友、医生言论仅代表其个人观点,不代表本站同意其说法,请谨慎参阅,本站不承担由此引起的法律责任。
北京市公安局朝阳分局备案编号:29
好大夫在线版权所有 Copyright 2018最新登陆会员
河南威洁斯清洁设备有限公司企翔科技西域行者谷峰阿德依风轻扬小海
推荐织梦源码
最新织梦模板
织梦整站模板
[] 1980金币
[] 下载权限:终身会员
[] 下载权限:终身会员
[] 下载权限:终身会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
[] 下载权限:高级会员
视频?图文教程 不知从哪里开始,不知怎学,那就看看大伙咋弄弄得!
 /  /  / 
本短视频教程均是本站客服总结常见问题汇总,希望能用更直观的方式帮助到大家。如果大家有什么不明白的问题可以在vip群反馈,小编伟哥会持续更新本系列教程......
点击数:108556
点击数:102976
点击数:97816在金蝶里新建帐套的会计科目级数和代码长度的意思_百度知道
在金蝶里新建帐套的会计科目级数和代码长度的意思
在金蝶里新建帐套的会计科目级数和代码长度的意思
我有更好的答案
科目级数就是指:比如:1002银行存款是一级科目,100201中国银行就是二级科目,再下面还有就是3级4级,依此类推,一般设6级的代码长度就是指:比如100201中国银行1级科目代码长度就是4,二级科目代码长度就是2,依此类推,一般来说一级科目是4,2级,3级,4级,5级,6级都是2。
科目级数就是指:比如:1002银行存款是一级科目,100201中国银行就是二级科目,再下面还有就是3级4级,依此类推,一般设6级的代码长度就是指:比如100201中国银行1级科目代码长度就是4,二级科目代码长度就是2,依此类推,一般来说一级科目是4,2级,3级,4级,5级,6级都是2懂了没
本回答被提问者采纳
尊敬的客户,您好:完整的问题描述应包括产品、版本、模块等信息,您提供的信息不全,我们无法做出进一步判断,建议您通过“金蝶桌面服务系统”获取服务支持。在“金蝶桌面服务系统”中您可以选择多种方式解决您的问题,不仅可以通过“知识库”、“文档中心”等实现自助服务,还可以通过“服务预约”与我们的服务工程师取得联系,或者在“需求反馈”中及时将您对金蝶产品的任何建议反馈给金蝶公司,欢迎您体验!下载地址:感谢您对金蝶公司的支持!
为您推荐:
其他类似问题
会计科目的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。已解决问题
NEW这是什么意思啊?
比如在个人中心,就在个人中心的右边就有NEW这到底是什么意思啊?
浏览次数:23038
用手机阿里扫一扫
最满意答案
该答案已经被保护
这个的意思是说,个人中心是重新改版过了,有了新的变化和功能了,不再是以前的那个个人中心了&
  从堆中划分一块区域,动态创建一个类型的数据,最后返回该区域的指针。该数据类型可以是标准数据类型,也可以是用户自定义类型。数据使用完后,应调用delete运算符来释放动态申请的内存(在堆中)。VB
  New 关键字引入   New 子句,该子句创建一个新的对象实例。New 子句必须指定一个可以用来创建实例的已定义类。可以在声明语句或赋值语句中使用 New。执行该语句时,它将调用指定类的构造函数,传递您提供的所有参数:   Dim Obj As Object   Obj = New SomeClass(&String required by constructor&)   ' ...   Dim MyLabel As New Label()   由于数组是类,因此 New 可以创建新的数组实例:   Dim MyArray As Integer()   MyArray = New Integer() {0, 1, 2, 3}   如果内存不足,无法创建新的实例,公共语言运行库将引发 OutOfMemoryException 错误。C++
  (1)new可用来生成动态无名变量,  如 int *p=  int *p[10]=new int [10]; //动态数组的大小可以是变量或常量;而一般直接声明数组时,数组大小必须是常量  又如:  int *p1;  double *p2;  p1=new int(12);  p2=new double [100];  l 分别表示动态分配了用于存放整型数据的内存空间,将初值12写入该内存空间,并将首地址值返回指针p1;  l 动态分配了具有100个双精度实型数组元素的数组,同时将各存储区的首地址指针返回给指针变量p2;   对于生成二维及更高维的数组,应使用多维指针,以二维指针为例  int **p=new int* [row]; //row是二维数组的行,p是指向一个指针数组的指针  for(int i=0;i&10;i++)  p=new int [col]; //col是二维数组的列,p是指向一个int数组的指针  (2)使用完动态无名变量后应该及时释放,要用到 delete 运算符   //释放单个变量  delete []p; //释放数组变量(不论数组是几维)  相比于一般的变量声明,使用new和delete 运算符可方便的使用变量。详细分析
  &new&是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘。new的过程
   当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:  class A  {    public:  A(int _i) :i(_i*_i) {}  void Say() { printf(&i=%dn&, i); }  };  //调用new:  A* pa = new A(3);  那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):  A* pa = (A*)malloc(sizeof(A));  pa-&A::A(3);    虽然从效果上看,这三句话也得到了一个有效的指向堆上的A对象的指针pa,但区别在于,当malloc失败时,它不会调用分配内存失败处理程序new_handler,而使用new的话会的。因此我们还是要尽可能的使用new,除非有一些特殊的需求。new的三种形态
   到目前为止,本文所提到的new都是指的&new operator&或称为&new expression&,但事实上在C++中一提到new,至少可能代表以下三种含义:new operator、operator new、placement new。  new operator就是我们平时所使用的new,其行为就是前面所说的三个步骤,我们不能更改它。但具体到某一步骤中的行为,如果它不满足我们的具体要求 时,我们是有可能更改它的。三个步骤中最后一步只是简单的做一个指针的类型转换,没什么可说的,并且在编译出的代码中也并不需要这种转换,只是人为的认识 罢了。但前两步就有些内容了。  new operator的第一步分配内存实际上是通过调用operator new来完成的,这里的new实际上是像加减乘除一样的操作符,因此也是可以重载的。operator new默认情况下首先调用分配内存的代码,尝试得到一段堆上的空间,如果成功就返回,如果失败,则转而去调用一个new_hander,然后继续重复前面 过程。如果我们对这个过程不满意,就可以重载operator new,来设置我们希望的行为。例如:  class A  {  public:  void* operator new(size_t size)  {  printf(&operator new calledn&);  return ::operator new(size);  }  };  A* a = new A();  这里通过::operator new调用了原有的全局的new,实现了在分配内存之前输出一句话。全局的operator new也是可以重载的,但这样一来就不能再递归的使用new来分配内存,而只能使用malloc了:  void* operator new(size_t size)  {  printf(&global newn&);  return malloc(size);  }  相应的,delete也有delete operator和operator delete之分,后者也是可以重载的。并且,如果重载了operator new,就应该也相应的重载operator delete,这是良好的编程习惯。  new的第三种形态&&placement new是用来实现定位构造的,因此可以实现new operator三步操作中的第二步,也就是在取得了一块可以容纳指定类型对象的内存后,在这块内存上构造一个对象,这有点类似于前面代码中的&p- &A::A(3);&这句话,但这并不是一个标准的写法,正确的写法是使用placement new:  #include &new.h&  void main()  {  char s[sizeof(A)];  A* p = (A*)s;  new(p) A(3); //p-&A::A(3);  p-&Say();  }  对头文件&new&或&new.h&的引用是必须的,这样才 可以使用placement new。这里&new(p) A(3)&这种奇怪的写法便是placement new了,它实现了在指定内存地址上用指定类型的构造函数来构造一个对象的功能,后面A(3)就是对构造函数的显式调用。这里不难发现,这块指定的地址既 可以是栈,又可以是堆,placement对此不加区分。但是,除非特别必要,不要直接使用placement new ,这毕竟不是用来构造对象的正式写法,只不过是new operator的一个步骤而已。使用new operator地编译器会自动生成对placement new的调用的代码,因此也会相应的生成使用delete时调用析构函数的代码。如果是像上面那样在栈上使用了placement new,则必须手工调用析构函数,这也是显式调用析构函数的唯一情况:  p-&~A();  当我们觉得默认的new operator对内存的管理不能满足我们的需要,而希望自己手工的管理内存时,placement new就有用了。STL中的allocator就使用了这种方式,借助placement new来实现更灵活有效的内存管理。处理内存分配异常
   正如前面所说,operator new的默认行为是请求分配内存,如果成功则返回此内存地址,如果失败则调用一个new_handler,然后再重复此过程。于是,想要从operator new的执行过程中返回,则必然需要满足下列条件之一:  l 分配内存成功  l new_handler中抛出bad_alloc异常  l new_handler中调用exit()或类似的函数,使程序结束  于是,我们可以假设默认情况下operator new的行为是这样的:  void* operator new(size_t size)  {  void* p = null  while(!(p = malloc(size)))  {  if(null == new_handler)  throw bad_alloc();  try  {  new_handler();  }  catch(bad_alloc e)  {    }  catch(&)  {}  }    }  在默认情况下,new_handler的行为是抛出一个bad_alloc异常,因此 上述循环只会执行一次。但如果我们不希望使用默认行为,可以自定义一个new_handler,并使用std::set_new_handler函数使其 生效。在自定义的new_handler中,我们可以抛出异常,可以结束程序,也可以运行一些代码使得有可能有内存被空闲出来,从而下一次分配时也许会成 功,也可以通过set_new_handler来安装另一个可能更有效的new_handler。例如:  void MyNewHandler()  {  printf(&New handler called!n&);  throw std::bad_alloc();  }  std::set_new_handler(MyNewHandler);  这里new_handler程序在抛出异常之前会输出一句话。应该注意,在 new_handler的代码里应该注意避免再嵌套有对new的调用,因为如果这里调用new再失败的话,可能会再导致对new_handler的调用, 从而导致无限递归调用(没有尝试过)。  在编程时我们应该注意到对new的调用是有可能有异常被抛出的,因此在new的代码周围应该注意保持其事务性,即不能因为调用new失败抛出异常来导致不正确的程序逻辑或数据结构的出现。例如:  class SomeClass  {    SomeClass() {}  public:  static SomeClass* GetNewInstance()  {  count++;  return new SomeClass();  }  };  静态变量count用于记录此类型生成的实例的个数,在上述代码中,如果因new分配内存失败而抛出异常,那么其实例个数并没有增加,但count变量的值却已经多了一个,从而数据结构被破坏。正确的写法是:  static SomeClass* GetNewInstance()  {  SomeClass* p = new SomeClass();  count++;    }  这样一来,如果new失败则直接抛出异常,count的值不会增加。类似的,在处理线程同步时,也要注意类似的问题:  void SomeFunc()  {  lock(someMutex); //加一个锁    p = new SomeClass();  unlock(someMutex);  }  此时,如果new失败,unlock将不会被执行,于是不仅造成了一个指向不正确地址的指针p的存在,还将导致someMutex永远不会被解锁。这种情况是要注意避免的。(参考:C++箴言:争取异常安全的代码)STL的内存分配与traits技巧
   在《STL原码剖析》一书中详细分析了SGI STL的内存分配器的行为。与直接使用new operator不同的是,SGI STL并不依赖C++默认的内存分配方式,而是使用一套自行实现的方案。首先SGI STL将可用内存整块的分配,使之成为当前进程可用的内存,当程序中确实需要分配内存时,先从这些已请求好的大内存块中尝试取得内存,如果失败的话再尝试 整块的分配大内存。这种做法有效的避免了大量内存碎片的出现,提高了内存管理效率。  为了实现这种方式,STL使用了placement new,通过在自己管理的内存空间上使用placement new来构造对象,以达到原有new operator所具有的功能。  template &class T1, class T2&  inline void construct(T1* p, const T2& value)  {  new(p) T1(value);  }  此函数接收一个已构造的对象,通过拷贝构造的方式在给定的内存地址p上构造一个新对 象,代码中后半截T1(value)便是placement new语法中调用构造函数的写法,如果传入的对象value正是所要求的类型T1,那么这里就相当于调用拷贝构造函数。类似的,因使用了 placement new,编译器不会自动产生调用析构函数的代码,需要手工的实现:  template &class T&  inline void destory(T* pointer)  {  pointer-&~T();  }  与此同时,STL中还有一个接收两个迭代器的destory版本,可将某容器上指定范 围内的对象全部销毁。典型的实现方式就是通过一个循环来对此范围内的对象逐一调用析构函数。如果所传入的对象是非简单类型,这样做是必要的,但如果传入的 是简单类型,或者根本没有必要调用析构函数的自定义类型(例如只包含数个int成员的结构体),那么再逐一调用析构函数是没有必要的,也浪费了时间。为 此,STL使用了一种称为&type traits&的技巧,在编译器就判断出所传入的类型是否需要调用析构函数:  template &class ForwardIterator&  inline void destory(ForwardIterator first, ForwardIterator last)  {  __destory(first, last, value_type(first));  }  其中value_type()用于取出迭代器所指向的对象的类型信息,于是:  template&class ForwardIterator, class T&  inline void __destory(ForwardIterator first, ForwardIterator last, T*)  {  typedef typename __type_traits&T&::has_trivial_destructor trivial_  __destory_aux(first, last, trivial_destructor());  }  //如果需要调用析构函数:  template&class ForwardIterator&  inline void __destory_aux(ForwardIterator first, ForwardIterator last, __false_type)  {  for(; first & ++first)  destory(&*first); //因first是迭代器,*first取出其真正内容,然后再用&取地址  }  //如果不需要,就什么也不做:  tempalte&class ForwardIterator&  inline void __destory_aux(ForwardIterator first, ForwardIterator last, __true_type)  {}  因上述函数全都是inline的,所以多层的函数调用并不会对性能造成影响,最终编译 的结果根据具体的类型就只是一个for循环或者什么都没有。这里的关键在于__type_traits&T&这个模板类上,它根据不同的T类 型定义出不同的has_trivial_destructor的结果,如果T是简单类型,就定义为__true_type类型,否则就定义为 __false_type类型。其中__true_type、__false_type只不过是两个没有任何内容的类,对程序的执行结果没有什么意义,但在编译器看来它对模板如何特化就具有非常重要的指导意义了,正如上面代码所示的那样。__type_traits&T&也是特化了的一系列模 板类:  struct __true_type {};  struct __false_type {};  template &class T&  struct __type_traits  {  public:  typedef __false _type has_trivial_  &&  };  template&& //模板特化  struct __type_traits&int& //int的特化版本  {  public:  typedef __true_type has_trivial_  &&  };  && //其他简单类型的特化版本  如果要把一个自定义的类型MyClass也定义为不调用析构函数,只需要相应的定义__type_traits&T&的一个特化版本即可:  template&&  struct __type_traits&MyClass&  {  public:  typedef __true_type has_trivial_  &&  };  模板是比较高级的C++编程技巧,模板特化、模板偏特化就更是技巧性很强的东西, STL中的type_traits充分借助模板特化的功能,实现了在程序编译期通过编译器来决定为每一处调用使用哪个特化版本,于是在不增加编程复杂性的 前提下大大提高了程序的运行效率。更详细的内容可参考《STL源码剖析》第二、三章中的相关内容。带有&[]&的new和delete
   我们经常会通过new来动态创建一个数组,例如:  char* s = new char[100];  &&    严格的说,上述代码是不正确的,因为我们在分配内存时使用的是new[],而并不是简单的new,但释放内存时却用的是delete。正确的写法是使用delete[]:  delete[]  但是,上述错误的代码似乎也能编译执行,并不会带来什么错误。事实上,new与new[]、delete与delete[]是有区别的,特别是当用来操作复杂类型时。假如针对一个我们自定义的类MyClass使用new[]:  MyClass* p = new MyClass[10];  上述代码的结果是在堆上分配了10个连续的MyClass实例,并且已经对它们依次调 用了构造函数,于是我们得到了10个可用的对象,这一点与Java、C#有区别的,Java、C#中这样的结果只是得到了10个null。换句话说,使用 这种写法时MyClass必须拥有不带参数的构造函数,否则会发现编译期错误,因为编译器无法调用有参数的构造函数。  当这样构造成功后,我们可以再将其释放,释放时使用delete[]:  delete[]  当我们对动态分配的数组调用delete[]时,其行为根据所申请的变量类型会有所不 同。如果p指向简单类型,如int、char等,其结果只不过是这块内存被回收,此时使用delete[]与delete没有区别,但如果p指向的是复杂 类型,delete[]会针对动态分配得到的每个对象调用析构函数,然后再释放内存。因此,如果我们对上述分配得到的p指针直接使用delete来回收, 虽然编译期不报什么错误(因为编译器根本看不出来这个指针p是如何分配的),但在运行时(DEBUG情况下)会给出一个Debug assertion failed提示。为对象调用析构函数
   要回答这个问题,我们可以首先看一看new[]的重载。  class MyClass  {    public:  MyClass() { printf(&ctorn&); }  ~MyClass() { printf(&dtorn&); }  };  void* operator new[](size_t size)  {  void* p = operator new[](size);  printf(&calling new[] with size=%d address=%pn&, size, p);    }  // 主函数  MyClass* mc = new MyClass[3];  printf(&address of mc=%pn&, mc);  delete[]  运行此段代码,得到的结果为:(VC2005)  calling new[] with size=16 address=003A5A58  ctor  ctor  ctor  address of mc=003A5A5C  dtor  dtor  dtor  虽然对构造函数和析构函数的调用结果都在预料之中,但所申请的内存空间大小以及地址的 数值却出现了问题。我们的类MyClass的大小显然是4个字节,并且申请的数组中有3个元素,那么应该一共申请12个字节才对,但事实上系统却为我们申 请了16字节,并且在operator new[]返后我们得到的内存地址是实际申请得到的内存地址值加4的结果。也就是说,当为复杂类型动态分配数组时,系统自动在最终得到的内存地址前空出了 4个字节,我们有理由相信这4个字节的内容与动态分配数组的长度有关。通过单步跟踪,很容易发现这4个字节对应的int值为0x,也就是 说记录的是我们分配的对象的个数。改变一下分配的个数然后再次观察的结果证实了我的想法。于是,我们也有理由认为new[] operator的行为相当于下面的伪代码:  template &class T&  T* New[](int count)  {  int size = sizeof(T) * count + 4;  void* p = T::operator new(size);  *(int*)p =  T* pt = (T*)((int)p + 4);  for(int i = 0; i & i++)  new(&pt) T();    }  上述示意性的代码省略了异常处理的部分,只是展示当我们对一个复杂类型使用new[] 来动态分配数组时其真正的行为是什么,从中可以看到它分配了比预期多4个字节的内存并用它来保存对象的个数,然后对于后面每一块空间使用 placement new来调用无参构造函数,这也就解释了为什么这种情况下类必须有无参构造函数,最后再将首地址返回。类似的,我们很容易写出相应的delete[]的实 现代码:  template &class T&  void Delete[](T* pt)  {  int count = ((int*)pt)[-1];  for(int i = 0; i & i++)  pt.~T();  void* p = (void*)((int)pt & 4);  T::operator delete(p);  }  由此可见,在默认情况下operator new[]与operator new的行为是相同的,operator delete[]与operator delete也是,不同的是new operator与new[] operator、delete operator与delete[] operator。当然,我们可以根据不同的需要来选择重载带有和不带有&[]&的operator new和delete,以满足不同的具体需求。
答案创立者
以企业身份回答&
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is ok

我要回帖

更多关于 西门子 区域长度错误 的文章

 

随机推荐