delete []p|wstring obj(L"sfdf\0ds",len)

本文探讨了C++中使用new与delete操作符时的常见错误,包括堆内存管理不当导致的问题,以及如何正确使用这些操作符。此外,还讨论了字符串与流操作的相关细节,特别是与wchar_t和wstring相关的注意事项。

1、

结构体struR里有一个类类型对象

struR *p=new struR[];

char *ps=new char[5];

运行第二步时,会出现错误,提示堆损坏

由于new struR[]语句里[]的原因,去掉上述语句里的[]即可解决。

参考:

 

原因可能是堆被损坏,这也说明 中或它所加载的任何DLL 中有bug】的解决



2、

struR *p=new struR;时

delete []p;会提示啥错误

delete p;不会提示啥错误

断言_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)问题解析

http://blog.csdn.net/haiross/article/details/46325023

new有[]则delete也要有[](且不管new的数据类型)??不是吧


3、

wstring   obj(L"sfdf\0ds",len);len表示的是字符串"sfdfds"要截取的字符个数,非字节数.

假若参数len值大于字符串"sfdfds"的字符个数,则似乎会出现问题。由此跟踪到wstring构造函数调用的memcpy(_S,_S,_N*sizeof(Wchar))形式,其中_N值等于len值。

该构造函数连终止符\0也可以读取。

输入输出流

字符串输入流istrstream也有类似构造函数:istrstream obj(L"sfdf\0ds",len)

与其他设备或是对象(如文件、字符串)关联的输入流类型(如文件输入流,cin与键盘这个输入设备关联),由于不是和字符串关联,所以这些输入流类型的构造函数里不能出现字符串参数(只能出现与其相关的设备或是对象参数,如一个文件)来建立关联,但是是否有len这个截取长度参数,如文件输入流要截取文件多长长度。

cin等待键盘输入字符。


输入流构造函数里与其他设备或是对象关联的参数是说明数据流的来源是谁,而数据流的目的地是内存上的变量。

输出流构造函数里与其他设备或是对象关联的参数是说明数据流的目的地是谁,而数据流的来源是内存上的变量。

无论输入输出流,其构造函数都是用于与其相关设备或是对象进行建立关联的。

所以,也只有字符串输出流ostrstream的构造函数里才会出现字符串参数,且是这里只能是字符串变量而不能是字符串常量。



输入输出流绑定的设备(文件、字符串则是指其所存放在的设备)的特点决定了输入输出流是否可以倒流倒带,如键盘由于无缓冲(即有只能暂存一个字符的空间)所以输入前一个的字符被变量读取后就可以输入的后一个字符覆盖,所以不可倒带,而文件的数据一直存于磁盘,可以倒带。




不仅磁盘上的一个数据空间对象可以描述为一个文件,就连设备(磁盘本身比如)也是可以描述为一个文件(设备描述文件?),对其读写就是对其进行控制操作(如,存放其设备描述信息,对应驱动程序信息)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值