teechart控件强制转换成CSerise,定义全局变量如何释放问题

zheng429893437 2019-01-02 10:19:51
使用Teechart控件添加两条fast line,teechart控件变量为m_tchart,定义了两条fast line如图
void CHystersis::InitialChar(void)
{
CSeries lineSeries = (CSeries)m_tchart.Series(0);
lineSeries.Clear();
ActaulLineSeries = lineSeries;

CSeries lineSeries1 = (CSeries)m_tchart.Series(1);
lineSeries1.Clear();

CommandLineSeries = lineSeries1;
}
ActaulLineSeries,CommandLineSeries变量是文件中定义的全局变量
CSeries ActaulLineSeries ;
CSeries CommandLineSeries;

第一步给ActaulLineSeries,CommandLineSeries变量初始化调用InitialChar这个函数,执行画线功能没有遇到问题,但是在关闭界面时候就报错了,调试跑到
void CHystersis::InitialChar(void)
{
CSeries lineSeries = (CSeries)m_tchart.Series(0);
lineSeries.Clear();
ActaulLineSeries = lineSeries;

CSeries lineSeries1 = (CSeries)m_tchart.Series(1);
lineSeries1.Clear();

CommandLineSeries = lineSeries1;
}
出错


请教各位大神,这是什么情况








...全文
168 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zheng429893437 2019-01-03
  • 打赏
  • 举报
回复
@zgl7903 解决了,没有用全局指针,还是用全局变量,在关闭函数里面清掉赋值就可以了
zgl7903 2019-01-02
  • 打赏
  • 举报
回复
个人分析, 全局变量他的解析是在程序退出时, 而此时的控件早已销毁
建议用全局指针, CSeries *xxxx = NULL

zheng429893437 2019-01-02
  • 打赏
  • 举报
回复
Unhandled exception at 0x7828f0b0 (mfc90d.dll) in EToolSimulator.exe: 0xC0000005: Access violation reading location 0xcccccccc.这是报错的信息
zheng429893437 2019-01-02
  • 打赏
  • 举报
回复
@zgl7903 在主窗口的所有的函数里面都不错报错,在子窗口的函数或者外部文件的函数调用就会报错。
zgl7903 2019-01-02
  • 打赏
  • 举报
回复
报什么错?
再不行就在 CHystersis 中添加public 接口函数, 通过接口函数访问
zheng429893437 2019-01-02
  • 打赏
  • 举报
回复
引用 4 楼 zgl7903 的回复:
1 if(ActaulLineSeries) 访问之前判断 指针有效
2 在窗口销毁时清空指针 DestroyWindow () { ActaulLineSeries=NULL; XXXXX }

在其他文件函数里面调用ActaulLineSeries->Clear()前加了if(ActaulLineSeries)判断能进来,是有效的,执行ActaulLineSeries->Clear()就报错了,在初始化函数OnInitDialog,指针变量赋值完,直接执行ActaulLineSeries->Clear();倒不会报错。
zgl7903 2019-01-02
  • 打赏
  • 举报
回复
1 if(ActaulLineSeries) 访问之前判断 指针有效
2 在窗口销毁时清空指针 DestroyWindow () { ActaulLineSeries=NULL; XXXXX }



zheng429893437 2019-01-02
  • 打赏
  • 举报
回复
@zgl7903 这种情况大概是什么问题?
zheng429893437 2019-01-02
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
个人分析, 全局变量他的解析是在程序退出时, 而此时的控件早已销毁
建议用全局指针, CSeries *xxxx = NULL

按照思路我改了,换成下面这种定义,放在初始化函数OnInitDialog,执行完点击关闭,报错倒没有了
ActaulLineSeries = &((CSeries)m_Hystersis.m_tchart.Series(0));
ActaulLineSeries->Clear();
CommandLineSeries = &((CSeries)m_Hystersis.m_tchart.Series(1));
CommandLineSeries->Clear();
定义换成全局指针
CSeries *ActaulLineSeries;
CSeries *CommandLineSeries;

在其他文件调用
extern CSeries *ActaulLineSeries;
extern CSeries *CommandLineSeries;


但衍生了另外一个问题,在其他文件函数里面调用ActaulLineSeries->Clear();报错,也是指针无法回收了


3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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