关于fopen函数返回错误指针问题

kasconfess 2009-12-04 03:13:00
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
FILE *pf=fopen("mm.bmp","rb");


return 0;
}
打开一个位图文件,FILE *pf=fopen("mm.bmp","rb");这句下断,然后在调试窗口里pf指针尽都是错误的,请问这是什么原因?
用的是VS2008。
...全文
1381 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
花生仁 2012-02-28
  • 打赏
  • 举报
回复
结贴了吗,问题是怎么解决的呢?
mrboy0317 2011-11-28
  • 打赏
  • 举报
回复
楼主有没有解决这个问题啊 ?我也同样遇到了这个问题 郁闷啊
jinsedeyuzhou 2011-10-22
  • 打赏
  • 举报
回复
fp = 0x10311448 {_ptr=0x00000000 <错误的指针> _cnt=0 _base=0x00000000 <错误的指针> ...}
这是什么情况
荷兰人号 2011-03-17
  • 打赏
  • 举报
回复
藐视不是文件指针的问题。
Arthas_wang 2010-07-30
  • 打赏
  • 举报
回复
你的文件的目录有问题,在VC2008中使用的16为字符集,最后使用一下格式
FILE *pf=fopen("..\\mm.bmp","rb");
还是不行就使用这个函数
FILE *pf=_wfopen(_T("..\\mm.bmp"),_T("rb"));
Arthas_wang 2010-07-30
  • 打赏
  • 举报
回复
你的文件的目录有问题,在VC2008中使用的16为字符集,最后使用一下格式
FILE *pf=fopen("..\\mm.bmp","rb");

blossommoon 2010-07-06
  • 打赏
  • 举报
回复
同遇到这样的问题,求解决方法啊。。。
pliok 2010-01-25
  • 打赏
  • 举报
回复
我也遇到了这个问题
错误指针导致后续的处理都出错,烦啊
do_fork 2009-12-04
  • 打赏
  • 举报
回复
这说明VC的中文太SB了,
文件没有读写操作,FILE结构中的某些成员,没被初始化是很正常的事情,并不是错误。
kasconfess 2009-12-04
  • 打赏
  • 举报
回复
+ pf 0x6c9b1448 {_ptr=0x00000000 <错误的指针> _cnt=0 _base=0x00000000 <错误的指针> ...} _iobuf *

+ _ptr 0x00000000 <错误的指针> char *
+ _base 0x00000000 <错误的指针> char *
这就是调试窗口里显示的内容
kasconfess 2009-12-04
  • 打赏
  • 举报
回复
或者编译后,将mm.bmp文件和编译后的可执行文件放在同一个目录!
再双击执行!!

执行是没有问题的,可以执行,我不明白的是在那里下断,一直跟踪pf,在下面的调试窗口里pf都是显示错误指针!
老邓 2009-12-04
  • 打赏
  • 举报
回复
或者将mm.bmp文件放在你这个工程文件所在的目录。
在VS里执行时,默认会在*.vcproj目录里查找文件。
kouwenlong 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kasconfess 的回复:]
加上判断
C/C++ codeif (pf== NULL)
{return0;
}

这个加后后,没有执行return 0,文件也是没有错误的,但就是在调试窗口里pf显示pf是错误指针
[/Quote]
既然不执行,那么说明pf是正确指针,不是你认为的那样。
kasconfess 2009-12-04
  • 打赏
  • 举报
回复
嗯,你就再F10下看看呗,非盯这干啥呀。我已经F10到尾了
老邓 2009-12-04
  • 打赏
  • 举报
回复
或者编译后,将mm.bmp文件和编译后的可执行文件放在同一个目录!
再双击执行!!
老邓 2009-12-04
  • 打赏
  • 举报
回复
FILE *pf=fopen("这里要用全路径,我猜你根本没找到要打开的文件!mm.bmp","rb");
kasconfess 2009-12-04
  • 打赏
  • 举报
回复
加上判断
C/C++ codeif (pf== NULL)
{return0;
}

这个加后后,没有执行return 0,文件也是没有错误的,但就是在调试窗口里pf显示pf是错误指针
deng1243 2009-12-04
  • 打赏
  • 举报
回复
FILE结构体定义如下:

typedef struct{
short level; //缓冲区“满”或“空”的程度
unsigned flags;//文件状态标志
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer;
...
...
...
}FILE;

而在CDIB类中BMP位图文件头结构的定义:

typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;

位图信息头结构的定义:

typedef struct tagBITMAPINFOHEADER{
DWORD biSize; //结构BITMAPINFOHEADER的字节数,即//sizeof(BITMAPINFOHEADER)*
LONG biWidth; //以像素为单位的图像宽度*
LONG biHeight; //以像素为单位的图像长度
WORD biPlanes; //目标设备的位平面数
WORD biBitCount //每个像素的位数*(1)
DWORD biCompression; //图像的压缩格式(这个值几乎总是为0)
DWORD biSizeImage; //以字节为单位的图像数据的大小(对//BI_RGB压缩方式而言)
LONG biXPelsPerMeter; //水平方向上的每米的像素个数
LONG biYPelsPerMeter; //垂直方向上的每米的像素个数
DWORD biClrUsed; //调色板中实际使用的颜色数(2)
DWORD biClrImportant; //现实位图时必须的颜色数(3)
} BITMAPINFOHEADER;

jenf 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 kasconfess 的回复:]
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
FILE *pf=fopen("mm.bmp","rb");


return 0;
}
打开一个位图文件,FILE *pf=fopen("mm.bmp","rb");这句下断,然后在调试窗口里pf指针尽都是错误的,请问这是什么原因?
用的是VS2008。
[/Quote]
嗯,你就再F10下看看呗,非盯这干啥呀。
kouwenlong 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kouwenlong 的回复:]
加上判断
C/C++ codeif (pf== NULL)
{return0;
}
[/Quote]
看看执行return 0没?
如果执行了,估计文件有问题,或者不存在,或者路径错误。
加载更多回复(6)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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