Ifstream由于未知原因而失败

时间:2012-11-04 20:19:55

标签: c++ memory-management binary ifstream pgm

我的函数用于将pgm文件格式读取到内存中。

我使用了以下链接http://www.cse.unr.edu/~bebis/CS308/Code/ReadImage.cpp中的来源。您可以在同一目录中找到其他人;和CS308中的一些说明;如果你有兴趣的话。

问题是ifstream ifp失败;我认为这段代码可能是原因;但它看起来很好。

任何想法都将受到赞赏

charImage = (unsigned char *) new unsigned char [M*N];

 ifp.read( reinterpret_cast<char *>(charImage), (M*N)*sizeof(unsigned char));

 if (ifp.fail()) {
   cout << "Image " << fname << " has wrong size" << endl;
   exit(1);
 }

2 个答案:

答案 0 :(得分:1)

问题是您的输入文件格式不正确。它应该有足够的数据来填充charImage,但事实并非如此,这就是它失败的原因。另一种可能是您尝试在Windows上运行此代码,并且需要以二进制模式打开该文件。

具体(对于二进制部分)改变:

 ifp.open(fname, ios::in);

为:

 ifp.open(fname, ios::in | ios::binary);

顺便说一下,投射新操作员的结果通常是不合适的。在这里,它只是多余的,没有任何意义。

答案 1 :(得分:1)

使用reinterpret_cast<...>()的任何内容对我来说都是可疑的,至少可以这么说。不过,这可能不是问题的根源。我个人猜测问题的根源是在Windows机器上运行代码而不是以二进制模式打开文件。尝试使用

std::ifstream in("filename", std::ios_base:::binary);

由于打开文件的代码不是问题的一部分,但这只是一个疯狂的猜测。