比较复杂的一个程序,delete不知道怎么用,帮帮忙吧
我要写一个程序,大概思想是有一个dialog, 里面有一个richedit2,每次从richedit里面读一行,判断其内容,进行一定的操作和存贮。
我定义了一个class CElementArray用来 存储一行里面所有的内容,每个内容都是keyword啊,变量啊什么的,都是一个CElement。(CElement里面没有指针)
class CElement : public CObject
{ private:
int length;
CString type;
CString content;
public:
CElement();
CElement(CString s);
virtual ~CElement();
CString getType();
CString getContents();
int getLength();
};
class CElementArray : public CObject
{
private:
CElement* elementArray[50];
int arrayLength;
public:
CElementArray();
CElementArray(CString oneLine);
virtual ~CElementArray();
void CInitElementArray(void);
void addElement(CElement* element);
CElement* getElement(int i);
int getArrayLength(void);
CMyDoc* m_Doc;
void init(CString oneLine);
};
CElementArray::CElementArray(CString oneLine)
{
.....
CInitElementArray();
CElement* newElement;
.....
}
在CElementArray(CString oneLine)里面,CInitElementArray();函数初始化elementArray[50],
void CElementArray::CInitElementArray(void)
{
CString init = "";
arrayLength=0;
for(int i=0; i<50; i++)
elementArray[i] = new CElement(init);
}
然后由于我判断读到一个element, 就 new一个newElement,然后存到elementArray里面,代码如下
CElement* newElement = new CElement(temp);
addElement(newElement);
我根本就不懂delete怎么用,所以析构函数什么也没写
在主函数里面,我有一个变量i来表明第几行,
for (i=0;i < nLineCount;i++)
{
nLineLength=0;
CString* strText=new CString("");
nLineLength = this->m_dialog->m_Edit.LineLength( m_dialog->m_Edit.LineIndex(i) );
this->m_dialog->m_Edit.GetLine(i, strText->GetBuffer(nLineLength+1), nLineLength+1);
strText->ReleaseBuffer(nLineLength);
CElementArray* m_elementArray = new CElementArray(*strText);
...... // 进行一些判断,然后会new 一些structure什么的把有用的信息存进去,读下一航的时候基本上上一行的m_elementArray就不用了,应该delete吗?我不知道要怎么搞,写了几行,但是运行时出错
由于程序很复杂,并不是每一个i++都是在这个for的开始处,可能中间有好多if,判断正确就i++,然后同样方法读新一行,这样就会new 新的m_elementArray 和strText,
build没有错误,但是运行几行后,出现一个错误窗口,debug assetion failed!
program:....
file:dbgheap.c
line:346
expression: _CrtCheckMemory()
然后就死掉了,时内存问题吗?m_elementArray 和strText都要delete吗?还有m_elementArray 里面的newelement,析构函数要怎么写
我刚学vc++2个月,被老板逼着编程序,但是什么都不太懂,那位高手帮帮忙吧