vc 编程小认识"/>
vc 编程小认识
今天找了一个编写缓存表的程序,看起来还是可以的。就是感觉有点像学生的作业,就拿过来用了,后来在用的过程中碰到了一些问题,记录下来。
1、error LNK2001: 无法解析的外部符号
这种以前就见到过,一般都是引用其他文件或dll中的未定义函数或变量,之前我碰到的都是这个样子的,但是这次我却怎么也没发现,后来明白了,是因为类中如果定义了静态变量 一定要在类外先进行初始化 如:int NODE::a = 1; 连接讲的比较清楚:.html
2、作为缓存区,例子定义了单链表存储数据,用资源表(可读表与可写表)来索引资源,但是单链表只在第一次存储数据的时候 new char[length] ,第二次使用的时候如果是第一次已经new过的空间,则先memset然后memcpy ,逻辑上是没有问题,但是实际上如果第二次赋值空间需要比第一次大,那么就出现了new的空间不够用,debug版本就会报错,release版本一般不会报错,但是这里存在风险,可能会产生数据错误,而且在最后delete的时候,因为指针指向的空间比开始的时候new的空间大,那么也会报错。连接:.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 ,实际上是我主线程注销之后,调用的类已经注销,但是缓存还在写文件,调用写的变量已经被析构函数注销了。故线程调用报错,使用同步方式,解决了这个问题。
更多推荐
vc 编程小认识
发布评论