vc++6.0向空指针里读数据的问题,高手来看

来源:百度知道 编辑:UC知道 时间:2024/05/30 02:31:39
问题是这样的,我自己封装了一个Picture类,提供图片的读取与显示到屏幕的功能,代用win32 api编程的,在读取像素时候发生了问题:程序必须向空指针读取像素的值才能正常运行,如果开辟内存的话将导致图象无法显示,只能显示一个黑屏,不知道是因为什么,各位高手帮小弟个帮,不胜感激!

void Picture::getLocalPicture(const string &sPath) throw(logic_error)
{
// 私有成员是这样定义的
// BITMAPFILEHEADER m_Head;
// BITMAPINFO m_Info;
// char *m_szPix;

ifstream in(sPath.c_str(), ios::binary);

if(!in)
{
string sErr = "本地文件 " + sPath + "无法打开!";
DeleteFeePoint();
throw logic_error(sErr);
}

// 读入文件头到结构体
in.read(reinterpret_cast<char*>(&m_Head), 14);

// 计算位图信息头大小(40byte)
int iInfoHeadSize = m_Head.bfOffBits - 14;

// 读入位图信息头到结构体
in.read(reinterpret_cast<char*>(&m_Info), iInfoHeadSize);

// windows api建立设备上下文,返回值是指向显示器的句丙
m_phBitmap = CreateDIBSection(NULL, &m_Info, DIB_RGB_

m_phBitmap = CreateDIBSection(NULL, &m_Info, DIB_RGB_COLORS, reinterpret_cast<void**>(&m_szPix), NULL, 0);

m_szPix被修改,指向数据的一片内存,你后面再new的话当然不对了.

占个位置等看结果

顺便回答:

// 代码采用vc6.0 sp2编写,是不是因为vc6.0比较垃圾的原因啊?

绝对不是^_^

楼主怎么知道是空指针呢?

最好在定义的时候赋值NULL;

在你怀疑的地方,设个断点检查看看是不是空指针。