CStringArray的Copy函数使用问题

ljx_csdn 2017-10-12 02:58:07
今天在使用CStringArray时出了一点小问题,使用的方式大致如下:

CStringArray cs1;
//...中间有一系列的操作去给cs1赋值...//
CStringArray cs2;
cs2.Copy(cs1);

在Copy时总是中断,后来调试了一下,发现因为CStringArray的构造函数构造时m_pData为空,所以每次Copy时,等于是向一个为NULL的地址copy数据,所以会中断,这个怎么解决啊,是我的使用方式不对还是?谢谢各位。
...全文
763 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljx_csdn 2017-10-12
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
	CStringArray a;
	CStringArray b;
	if(!a.IsEmpty())
		a.Copy(b);
您好,意思是当CStringArray为空时不能进行Copy,它的Copy函数不会去为一个空的CStringArray开辟空间以完成Copy任务是吗?
ljx_csdn 2017-10-12
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 不给出完整的代码,无法帮你。
老师您好,下面是CStringArray的成员边量:
 
    CString* m_pData;   // the actual array of data  
    INT_PTR m_nSize;     // # of elements (upperBound - 1)  
    INT_PTR m_nMaxSize;  // max allocated  
    INT_PTR m_nGrowBy;   // grow amount  
就是在进行copy时,我单步调试跟踪CStringArray的Copy函数,发现cs2里的m_pData为NULL,所以造成中断。CStringArray在定义时,构造函数会初始化m_pData为NULL,在进行Copy时,Copy函数好像并没有给m_pData分配空间,所以我的使用会出错。 现在搞不懂的就是,Copy函数是要在CStringArray对象的m_pData不为空时才能使用,还是说我的理解有误,使用方式不对。
ljx_csdn 2017-10-12
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
那就判断a是空时,加一句代码让a不是空,再Copy。
恩恩 谢谢老师 现在正在这样做
赵4老师 2017-10-12
  • 打赏
  • 举报
回复
那就判断a是空时,加一句代码让a不是空,再Copy。
ljx_csdn 2017-10-12
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
CObArray::Copy void Copy( const CObArray& src ); Parameters src Source of the elements to be copied to the array. Remarks Call this member function to overwrite the elements of the given array with the elements of another array of the same type. Copy does not free memory; however, if necessary, Copy may allocate extra memory to accommodate the elements copied to the array. The following table shows other member functions that are similar to CObArray::Copy. Class Member Function CByteArray void Copy( const CByteArray& src ); CDWordArray void Copy( const CDWordArray& src ); CPtrArray void Copy( const CPtrArray& src ); CStringArray void Copy( const CStringArray& src ); CUIntArray void Copy( const CUIntArray& src ); CWordArray void Copy( const CWordArray& src ); CObArray Overview | Class Members | Hierarchy Chart See Also CObArray::Append
谢谢老师,这个之前也看了,但是当时还是不是太清楚调用Copy的对象是否可以为空,看了3楼的回答,加上错误原因分析,看来是不能了。
赵4老师 2017-10-12
  • 打赏
  • 举报
回复
CObArray::Copy void Copy( const CObArray& src ); Parameters src Source of the elements to be copied to the array. Remarks Call this member function to overwrite the elements of the given array with the elements of another array of the same type. Copy does not free memory; however, if necessary, Copy may allocate extra memory to accommodate the elements copied to the array. The following table shows other member functions that are similar to CObArray::Copy. Class Member Function CByteArray void Copy( const CByteArray& src ); CDWordArray void Copy( const CDWordArray& src ); CPtrArray void Copy( const CPtrArray& src ); CStringArray void Copy( const CStringArray& src ); CUIntArray void Copy( const CUIntArray& src ); CWordArray void Copy( const CWordArray& src ); CObArray Overview | Class Members | Hierarchy Chart See Also CObArray::Append
worldy 2017-10-12
  • 打赏
  • 举报
回复
	CStringArray a;
	CStringArray b;
	if(!a.IsEmpty())
		a.Copy(b);
赵4老师 2017-10-12
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 不给出完整的代码,无法帮你。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧