动态分配空数组

来源:互联网 发布:seo自学论坛 编辑:程序博客网 时间:2024/05/29 09:20

C++虽然不允许定义长度为0的数组变量,但明确指出,调用new动态创建长度为0的数组是合法的。

char  arr[0] ;     //错误

char  *cp   =   new   char[0] ;  //正确

用new动态创建长度为0的数组时,new返回有效地非零指针。该指针与new返回的其他指针不同,不能进行解引用操作,它毕竟没有指向任何元素。

可以做的操作:比较运算,因此该指针能在循环中使用;在该指针上加减0;或减去本身,得0值。


动态分配的内存最后必须进行释放,否则,内存最终将会逐渐耗尽。如果不在需要使用动态创建的数组,必须显式地将其占用的存储空间返还给程序的自由存储区。C++语言为指针提供delete[]表达式释放指针所指向的数组空间。     

delete  [ ]    pia;  //该语句回收了pia所指向的数组,把相应的内存返还给自由存储区。如果漏掉了空方括号,这是一个编译器无法发现的错误,将导致程序在运行时出错。

理论上,回收数组时缺少空方括号对,至少会导致运行时少释放了内存空间,从而产生内存泄露。对于某些系统或元素类型,可能更严重的运行时错误。


通常是因为在编译时无法知道数组的维数,所以才需要动态创建该数组。采用这种技术要比建立固定大小的数组安全。

标准库函数strlen返回的是字符串的长度,并不包括字符串结束符 ,在获得的字符串长度必须  加1以便在动态分配时预留结束符的存储空间。

0 0
原创粉丝点击