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>stdafx.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>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 出现的问题相关推荐

  1. CString工作原理和常见问题分析

    关于Cstring 类 版权所有© Stevencao@benq.com 2003-11-6 转自:http://blog.csdn.net/laiyiling/archive/2004/10/05/ ...

  2. 对云风 cstring 第二次解析

    前言 从明天起 关心粮食和蔬菜 我有一所房子 面朝大海 春暖花开 本文前提条件 1.了解 posix 线程 2.了解 原子操作 3.具备简单C基础,或者 你也敲一遍. 如果上面不太清楚,你可以翻看我以 ...

  3. VC:CString用法整理(转载)

    1.CString::IsEmpty BOOL IsEmpty( ) const; 返回值:如果CString 对象的长度为0,则返回非零值:否则返回0. 说明:此成员函数用来测试一个CString ...

  4. Cstring的使用

    https://msdn.microsoft.com/zh-cn/aa315043 1.字符串提取函数,CString::Left.CString::Mid .CString::Right CStri ...

  5. C++实现CString和string的互相转换(转)

    CString->std::string 例子: CString strMfc="test"; std::string strStl; strStl=strMfc.GetBu ...

  6. CString的用法

    1.CString::IsEmpty BOOL IsEmpty( ) const; 返回值:如果CString 对象的长度为0,则返回非零值:否则返回0. 说明:此成员函数用来测试一个CString ...

  7. BSTR 、LPCTSTR、CString附C语言串基本操作

    CString ,BSTR ,LPCTSTR之间关系和区别 CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指 ...

  8. C++实现CString和string的互相转换

    2019独角兽企业重金招聘Python工程师标准>>> CString->std::string 例子: CString strMfc="test"; st ...

  9. UniCode 下 CString 转 char* 的方法

    今天进行文件操作时,将CString的GetBuffer()后直接倒到char数组后写入文件发现 每个字符与字符之间都有一个空格存在,而且有内容丢失.原来CString类对象GetBuffer(),后 ...

  10. VC++2005 CString和char*的相互转换

    原文:http://laue.cnblogs.com/archive/2005/12/26/305208.aspx 首先声明我不是一个高手,而是一个初学者,文章同样也是一个初学者对于CString和c ...

最新文章

  1. 末学者笔记--openstack共享组件:rabbitmq(3)
  2. fifa17服务器维护,3月17日《EA SPORTS FIFA Online 2》服务器例行停机维护公告
  3. C# Regex(3)
  4. 无意中发现的一份清华大佬的代码模版,简洁易懂!
  5. qt 工作流_助力提升企业生产力-工作流管理
  6. list删除null
  7. Bailian4132 四则运算表达式求值【文本处理】
  8. 亭台六七座,八九十枝花——python正则表达
  9. 人民币大写金额转换C#方法
  10. w10的计算机服务在哪,w10电脑服务界面在哪里
  11. 【RocketMQ】Send [1] times, still failed以及No route info of this topic问题排查思路总结
  12. python假期培训班
  13. 高等数学笔记-乐经良老师-第五章-积分(Ⅰ)-定积分与不定积分-第一节-定积分的概念
  14. Python判断变量的类型
  15. 区块链是否预示着游戏新时代的到来?
  16. 全面认识Android OS
  17. iic获取salve设备地址_Linux下使用IIC总线读写EEPROM(读写i2c从设备通用程序)
  18. 有什么实用的电脑录音软件
  19. 移动安全--23--其他Android安全知识总结
  20. 羊皮卷的故事-第七章

热门文章

  1. Conmi的正确答案——linux/ubuntu安装web运维工具(Cockpit)
  2. end of file encountered on input file汇编
  3. 埋骨何须桑梓地,人生无处不青山!
  4. 二的负三次方php中怎么表示什么,(-2)的负平方 (-3)的负三次方 是什么意思 各等于多少...
  5. TC神器应用——颜色与备注
  6. 命令win7 64安装mysql_Win7 64位安装MySQL及配置使用教程
  7. 几种常见的hash算法
  8. 如何使用ElementUI的table组件来实现单元格的行合并
  9. 行星齿轮动力学模型matlab程序代码
  10. 选择恐惧症的福音!教你认清MVC,MVP和MVVM