关于使用CString 出现的问题
1、CString是一个很好用的结构体。我也是因为偶然的原因,用到了。当然遇见了很多的问题,还有一些精髓需要领悟。一些比较好的blog:
讲解CString的一些机制
http://blog.csdn.net/shupan001/article/details/6437783
CString一个好处是,比如我想连接两个字符串,char* 类型的话必须自己编程实现或者用函数strcat。但是CString就可以直接用“+”连接。实在是方便。更多方便了解了CString之后会发现。
2、首先把代码拿出来,然后说问题吧。
CSpreadSheet.h 和CSpreadSheet.cpp我就不说了,这个就是使用.xls的接口文件吧。网上可以下载到。我的另外一篇文章也有说过。
stdafx.h内容:
#include <afxdb.h>
#include <odbcinst.h>CString strContents[256];
stdafx.cpp
#include "stdafx.h"
test.cpp
#include "stdafx.h"
#include "CSpreadSheet.h"int getinformation()
{
CSpreadSheet SS("c:\\test.xls", "");CStringArray Rows, Column;
int k = 0;for (int i = 1; i <= SS.GetTotalRows(); i++)
{// 读取一行SS.ReadRow(Rows, i);for (int j = 1; j <= Rows.GetSize(); j++){if(j == 1)strContents[k++] = Rows.GetAt(j-1);elsestrContents[k++] = Rows.GetAt(j-1);}}
return 1;
}
int main()
{getinformation();return 0;
}
整个程序test在网上找一个程序自己修改了一下。然后编译通过。但是我输入了/force。warning是:
1>test.obj : warning LNK4006: "class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > > * strContents" (?strContents@@3PAV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@A) 已在 CSpreadSheet.obj 中定义;已忽略第二个定义
1>F:\D\VC 2010\C\thefirstexcel\Debug\thefirstexcel.exe : warning LNK4088: 因 /FORCE 选项生成了映像;映像可能不能运行
执行的时候。断点在主函数getinformation()函数后面。getinformation函数运行良好。但是在return 0这一句出现了错误。
搜0xfeeefeee会出现很多。但是也基本上理解了这个错误的原因:就是试图释放一个已经释放的空间(或者叫2次释放空间)。堆栈断点在atlsimpstr.h
void Release() throw(){ATLASSERT( nRefs != 0 );if( _AtlInterlockedDecrement( &nRefs ) <= 0 ){pStringMgr->Free( this );}}
在pStringMgr->Free(this)这一句断了下来。如果再往前的话,回不到程序,会进入汇编语言。
nRefs是引用次数吧。跟踪这个值发现nRefs在断点的时候是一个负值-17891603。联想到0xfeeefeee的错误,基本上认为是多次释放空间了。
那问题是哪里多次释放了空间。不禁想起了那个编译的时候的警告。
stdafx.h
#include <afxdb.h>
#include <odbcinst.h>extern CString strContents[256];
stdafx.cpp
#include "stdafx.h"
CString strContents[256];
然后进行编译,没有警告了。执行,然后能够很好的退出来,没有再出现问题和错误了。
我然后进行了其他一些测试,基本就是这个原因了。两个都有引用这个CString,但是第二个忽略了,但是引用计数器却没有加1.于是当CString使用完成后释放空间发现释放了一个释放过的空间,于是出错。
在此记录一下。
关于使用CString 出现的问题相关推荐
- CString工作原理和常见问题分析
关于Cstring 类 版权所有© Stevencao@benq.com 2003-11-6 转自:http://blog.csdn.net/laiyiling/archive/2004/10/05/ ...
- 对云风 cstring 第二次解析
前言 从明天起 关心粮食和蔬菜 我有一所房子 面朝大海 春暖花开 本文前提条件 1.了解 posix 线程 2.了解 原子操作 3.具备简单C基础,或者 你也敲一遍. 如果上面不太清楚,你可以翻看我以 ...
- VC:CString用法整理(转载)
1.CString::IsEmpty BOOL IsEmpty( ) const; 返回值:如果CString 对象的长度为0,则返回非零值:否则返回0. 说明:此成员函数用来测试一个CString ...
- Cstring的使用
https://msdn.microsoft.com/zh-cn/aa315043 1.字符串提取函数,CString::Left.CString::Mid .CString::Right CStri ...
- C++实现CString和string的互相转换(转)
CString->std::string 例子: CString strMfc="test"; std::string strStl; strStl=strMfc.GetBu ...
- CString的用法
1.CString::IsEmpty BOOL IsEmpty( ) const; 返回值:如果CString 对象的长度为0,则返回非零值:否则返回0. 说明:此成员函数用来测试一个CString ...
- BSTR 、LPCTSTR、CString附C语言串基本操作
CString ,BSTR ,LPCTSTR之间关系和区别 CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指 ...
- C++实现CString和string的互相转换
2019独角兽企业重金招聘Python工程师标准>>> CString->std::string 例子: CString strMfc="test"; st ...
- UniCode 下 CString 转 char* 的方法
今天进行文件操作时,将CString的GetBuffer()后直接倒到char数组后写入文件发现 每个字符与字符之间都有一个空格存在,而且有内容丢失.原来CString类对象GetBuffer(),后 ...
- VC++2005 CString和char*的相互转换
原文:http://laue.cnblogs.com/archive/2005/12/26/305208.aspx 首先声明我不是一个高手,而是一个初学者,文章同样也是一个初学者对于CString和c ...
最新文章
- 末学者笔记--openstack共享组件:rabbitmq(3)
- fifa17服务器维护,3月17日《EA SPORTS FIFA Online 2》服务器例行停机维护公告
- C# Regex(3)
- 无意中发现的一份清华大佬的代码模版,简洁易懂!
- qt 工作流_助力提升企业生产力-工作流管理
- list删除null
- Bailian4132 四则运算表达式求值【文本处理】
- 亭台六七座,八九十枝花——python正则表达
- 人民币大写金额转换C#方法
- w10的计算机服务在哪,w10电脑服务界面在哪里
- 【RocketMQ】Send [1] times, still failed以及No route info of this topic问题排查思路总结
- python假期培训班
- 高等数学笔记-乐经良老师-第五章-积分(Ⅰ)-定积分与不定积分-第一节-定积分的概念
- Python判断变量的类型
- 区块链是否预示着游戏新时代的到来?
- 全面认识Android OS
- iic获取salve设备地址_Linux下使用IIC总线读写EEPROM(读写i2c从设备通用程序)
- 有什么实用的电脑录音软件
- 移动安全--23--其他Android安全知识总结
- 羊皮卷的故事-第七章
热门文章
- Conmi的正确答案——linux/ubuntu安装web运维工具(Cockpit)
- end of file encountered on input file汇编
- 埋骨何须桑梓地,人生无处不青山!
- 二的负三次方php中怎么表示什么,(-2)的负平方 (-3)的负三次方 是什么意思 各等于多少...
- TC神器应用——颜色与备注
- 命令win7 64安装mysql_Win7 64位安装MySQL及配置使用教程
- 几种常见的hash算法
- 如何使用ElementUI的table组件来实现单元格的行合并
- 行星齿轮动力学模型matlab程序代码
- 选择恐惧症的福音!教你认清MVC,MVP和MVVM