2013_11_13:关于 new 和delelte 的使用

1 、在一个函数中new了一块空间,然后再另一个函数使用,当最后要释放时,如果释放时出现堆栈错误,可能是释放堆栈太快了,数据来不及读取处理,需要在关闭某些函数资源后sleep一会儿,再delete在有效,否则可能会出现错误。(这只是个人情况)

比如:

我在函数A中new了一块buffer,然后再call back 函数中使用这块空间,在执行结束后,我们需要关闭一些资源,这是我们就需要sleep(100)//休眠0.1秒,delete buffer才不会出错。但是切记,有new一定要delete掉,不然会出现内存泄漏,关于内存泄漏可以使用vld来测试,具体使用方法可以百度。

2、对于字对齐问题,短字符向长字符对齐,需要注意是否有符号。

比如:

在访问一个内存为char *prt;然后DWORD addr初始化为1,然后addr+=prt;这是就需要注意了,因为声明的是有符号char *,DWORD是32位,而char *是8位,当取char地址时,如果第一位1,那么当执行addr+=prt时,短的向长的补齐,且低位对齐,那么DWORD 的 addr应该为0000000000000000000000000000001;而当prt设为10001111时,prt会前面补24个1,那么最后addr+=prt执行的结果是1111111111111111111110010000(具体多个0或者1就自己慢慢数数清楚啊,我也是没数清楚的),而不是0000000000000000000010010000,所以在对于地址+操作时,且是长度不一样的变量保持时,一定要用unsigned 表明是无符号的。

posted @ 2013-11-13 22:37  梧桐树下的一缕阳光  阅读(281)  评论(0编辑  收藏  举报