关于类的指针对象和普通对象由于使用错误造成莫名报错
2010-02-20 21:02
447 查看
在自定义类中定义一个私有成员变量,然后让该类的成员函数调用此私有成员变量,就会弹出图中的错误提示信息,问题出在哪里呢?
是BCB6.0编译器的问题还是自定义类时候出错?
原因查明:在Unit1中我定义了一个MyGraphics *mygraphics 指针对象,Unit1的构造函数中没有给这个 mygraphics 指针对象分配内存,系统默认分配的内存只有四个字节,故早正内存分陪不足的错误如图3所示,修改方法在Unit1的构造函数中为mygraphics 指针对象分配内存,代码如下:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//DoubleBuffered = true;
// 初始化GDI+
GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
mygraphics=new MyGraphics;
m_btest=true;
}
另外保证系统内存不浪费,请在使用完指针后将其内存释放,代码如下:
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
// 闭关GDI+
GdiplusShutdown(m_gdiplusToken);
delete mygraphics;
mygraphics=NULL;
}
其中mygraphics=NULL是为了防止mygraphics成为野指针,故将其制空。
如果我们在定义类的对象时候直接定义成普通对象而非指针对象,这样在使用类对象的时候就不会出现上述错误。
是BCB6.0编译器的问题还是自定义类时候出错?
原因查明:在Unit1中我定义了一个MyGraphics *mygraphics 指针对象,Unit1的构造函数中没有给这个 mygraphics 指针对象分配内存,系统默认分配的内存只有四个字节,故早正内存分陪不足的错误如图3所示,修改方法在Unit1的构造函数中为mygraphics 指针对象分配内存,代码如下:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//DoubleBuffered = true;
// 初始化GDI+
GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
mygraphics=new MyGraphics;
m_btest=true;
}
另外保证系统内存不浪费,请在使用完指针后将其内存释放,代码如下:
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
// 闭关GDI+
GdiplusShutdown(m_gdiplusToken);
delete mygraphics;
mygraphics=NULL;
}
其中mygraphics=NULL是为了防止mygraphics成为野指针,故将其制空。
如果我们在定义类的对象时候直接定义成普通对象而非指针对象,这样在使用类对象的时候就不会出现上述错误。
相关文章推荐
- release对象过度使用,造成野指针错误
- 转帖:MS SQL Server 2000 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- 使用Handler对象引发空指针错误
- 关于使用ASP.NE 1.1发送电子邮件时出现的 未能访问“CDO.Message”对象 的错误的解决方法
- error #2153: expression must have class type(低级错误:看是指针还是对象->和.的使用要正确)
- 接收对 http://192.168.1.18:8001/ObtainData/Service 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。
- 关于一个类中使用自己(类对象或类指针)
- SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- C++异常对象传递的时候,使用普通对象还是指针还是引用(使用引用)
- SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- 使用sql server时碰到的错误 关于对象.属性qingjia.id' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
- Appium使用PageFactory初始化对象时报空指针错误
- C++由于指针对象释放,造成Std::__non_rtti_Object例外发生
- 关于asp使用CreateObject("Excel.Application")出现无法创建ActiveX对象的错误
- SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- 转摘--MS SQL Server 2000 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- [转]SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法
- C++常量限定符的使用(指针、引用、普通对象)
- [错误记录]关于指针传递获得数据使用错误问题....
- 关于集合中迭代器中next()方法重复使用造成的错误