vc 编程小认识

今天找了一个编写缓存表的程序,看起来还是可以的。就是感觉有点像学生的作业,就拿过来用了,后来在用的过程中碰到了一些问题,记录下来。

1、error LNK2001: 无法解析的外部符号              

                           这种以前就见到过,一般都是引用其他文件或dll中的未定义函数或变量,之前我碰到的都是这个样子的,但是这次我却怎么也没发现,后来明白了,是因为类中如果定义了静态变量 一定要在类外先进行初始化  如:int NODE::a = 1;    连接讲的比较清楚:http://www.cnblogs.com/litstrong/archive/2011/01/05/1926558.html

        2、作为缓存区,例子定义了单链表存储数据,用资源表(可读表与可写表)来索引资源,但是单链表只在第一次存储数据的时候 new char[length] ,第二次使用的时候如果是第一次已经new过的空间,则先memset然后memcpy ,逻辑上是没有问题,但是实际上如果第二次赋值空间需要比第一次大,那么就出现了new的空间不够用,debug版本就会报错,release版本一般不会报错,但是这里存在风险,可能会产生数据错误,而且在最后delete的时候,因为指针指向的空间比开始的时候new的空间大,那么也会报错。连接:http://blog.sina.com.cn/s/blog_622bd16601018zzu.html            讲的不错。

        3、当我检测memory leak的时候发现,好多memory leak, 第一种情况:new了之后没有delete,会出现memory leak。。。 第二种情况:int转换成string的时候如果用ostream或sstream等会出现memory leak 。。。   顺便提一句,检测memory leak的方法同上连接。

        4、不知道为什么我本来new char[3] ,strcpy("ooo"), 但是存储之后却变成了"ooo        ?",就是说变长了,很迷惑,后来加多参数length在获取内容之后先进行截取,得到了正确结果。

         5、好多时候出现 heap coruption ,实际上是我主线程注销之后,调用的类已经注销,但是缓存还在写文件,调用写的变量已经被析构函数注销了。故线程调用报错,使用同步方式,解决了这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值