hur.cn - 华软网

 热门搜索

CEditView类问题

  作者:未知    来源:网络    更新时间:2010/4/3
COutPutEditView   m_EditOutput;
if(!m_EditOutput.Create(NULL,NULL,ES_AUTOHSCROLL|WS_VSCROLL,CRect(0,0,0,0),&m_TabSolExplorer,2))
return -1;

COutPutEditView从CEditView派生出来的。
编译运行都没问题,退出程序时报错了。
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!

Program: D:\ProgramItem\VC\IVR\TelCallPlatform\Debug\TelCallPlatform.exe
File: dbgheap.c
Line: 1044

Expression: _CrtIsValidHeapPointer(pUserData)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)
---------------------------
终止(A)   重试(R)   忽略(I)   
---------------------------
在网上找了很久,大多数都以为是销毁的时候没有释放资源。列位帮帮助,实在是不知从何下手咯。
---华软 网友回答---
找new 的地方。看看是否正常delete。
---华软网友回复---
消毁窗口的时候没有delete
也没有NEW
---华软网友回复---
换成
CEditBase   m_EditOutput;
if (!m_EditOutput.Create(WS_VSCROLL|ES_MULTILINE|WS_CHILD|WS_VISIBLE,CRect(0,0,0,0), &m_TabSolExplorer, 2))
return -1;
CEditBase   从CEdit派生
这样又是正常的,能正常退出。
就CEditView不行。
---华软网友回复---
你的这段代码是加在那里的?
---华软网友回复---
int CGuiOutPutMessage::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CGuiControlBar::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_TabSolExplorer.Create(WS_VISIBLE|WS_CHILD,CRect(0,0,0,0),this,0x9999))
return -1;

const DWORD dwStyle =LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL;


if (!m_ListCtrlConfMessage.Create(dwStyle,CRect(0,0,0,0), &m_TabSolExplorer, 1))
return -1;

/*if (!m_EditOutput.Create(WS_VSCROLL|ES_MULTILINE|WS_CHILD|WS_VISIBLE,CRect(0,0,0,0), &m_TabSolExplorer, 2))
return -1;*/

if(!m_EditOutput.Create(NULL,NULL,ES_AUTOHSCROLL|WS_VSCROLL,CRect(0,0,0,0),&m_TabSolExplorer,2))
return -1;

if (!m_Search.Create(dwStyle,CRect(0,0,0,0), &m_TabSolExplorer, 3))
return -1;


if (!m_EditFind.Create(ES_AUTOVSCROLL|ES_MULTILINE|WS_CHILD|WS_VISIBLE,CRect(0,0,0,0), &m_TabSolExplorer, 4))
return -1;

/* if (!m_EditScriptMessage.Create(WS_VSCROLL|ES_MULTILINE|WS_CHILD|WS_VISIBLE,CRect(0,0,0,0), &m_TabSolExplorer, 5))
return -1;*/
if(!m_EditScriptMessage.Create(NULL,NULL,ES_AUTOHSCROLL|WS_VSCROLL,CRect(0,0,0,0),&m_TabSolExplorer,5))
return -1;

m_EditOutput.SetFont(&theApp.myFont);
m_EditScriptMessage.SetFont(&theApp.myFont);

m_TabSolExplorer.SetImageList(IDB_DBPROJECTS, 16,8, RGB (255, 0, 0));
m_TabSolExplorer.Addtab(&m_EditOutput,"系统信息",0);
m_TabSolExplorer.Addtab(&m_ListCtrlConfMessage,"会议信息",1);
m_TabSolExplorer.Addtab(&m_Search,"行列信息",2);
m_TabSolExplorer.Addtab(&m_EditFind,"日志信息",3);
m_TabSolExplorer.Addtab(&m_EditScriptMessage,"剧本信息",4);
SetIcon(IDB_BITMAPHELP,16,5,RGB(255,0,0),3);
InitializeConfMessage();
return 0;
}

---华软网友回复---
看明白了,你计划做一个OutputWindow这样的东西哇?
EditView需要搭配Document运用,独自创建也不是不能够。
然则进程对照麻烦。如果CEdit能够完成你的功能,为什么不运用CEdit?
---华软网友回复---
CEdit是界面显示上有问题,没找到解决措施,用CEditView能够弥补CEdit,就是销毁时不知怎么回事。。。。
界面是调用他人的DLL来用
---华软网友回复---
毛病在DUBUG下出现的,在RELEASE下没问题,
---华软网友回复---
Release下没问题,这是由于Release下不会有ASSERT。
然则你的代码应该是有问题的,也许Release下会发生一些稀里糊涂的程序溃散,只是你运行时间短没发现。


---华软网友回复---
运用CEdit,有什么用的问题呢?CEditView可编辑区域实际就是一个CEdit。
---华软网友回复---
CEdit不能充满整个区域,。。。。SIZE里没设置也不行。
---华软网友回复---
不知道m_TabSolExplorer是什么类型的,但我想这个实例是应该复杂加入的各种视图的delete的,如果你自己先把这些视图的实例delete了,也会出这类Debug Assertion Failed!断言错。如果我没有猜错的话,你的这些视图实例,也就是如m_EditFind等和m_TabSolExplorer是在头资料中一起定义的,可能要注意它们的顺序。由于成员变量在类析构是的析构顺序也是不同的。我假定m_EditOutput先被销毁了,其加入m_TabSolExplorer的指针就是非法的了,这是系统再析构m_TabSolExplorer是调用其析构函数,去delete其保存的每一个指针,必然要出断言错,由于那个指针所指的堆内存分配已经被销毁了。

只是个猜想,看不到源码,只可这么猜。越俎代庖删除一个应该由系统删除的东西也会致使这类毛病Debug Assertion Failed!。_CrtIsValidHeapPointer。
---华软网友回复---
代码看m_TabSolExplorer实例的类的意图可能是希望你new各种CWnd,然后把Cwnd*交给它来措置惩罚,最终由他销毁堆上的各种Cwnd实例。你运用了成员变量,它没有预料到。
---华软网友回复---
ronghaoyue你真是高人,按你的思绪解决咯,真佩服你,没看到源码,你也能猜获得。
---华软网友回复---
能帮上忙,我也很欢乐。
---华软网友回复---
列位高手怎样用CEDITVIEW来显示二进制,
如 00000000:01 02 03 04 05 06    
还能实现这些二进制数据的复制,粘贴?      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。