以下代码导致.ReadFromFile行上的Segmentation Fault:
int main()
{
// Load in.bmp
BMP * original;
cout << "line " << __LINE__ << ": Got here!" << endl;
original->ReadFromFile("in.bmp"); //Error HERE!
int width = original->TellWidth();
int height = original->TellHeight();
cout << "line " << __LINE__ << ": Got here!" << endl;
我正在使用EasyBMP库,它包含在主要功能之上。我知道它与内存和指针有关,但我无法弄清楚用什么代替“original-&gt;”......我试过(*原创)。和(&amp; original)。但我似乎无法得到它。有什么帮助吗?
谢谢!
答案 0 :(得分:2)
指针original
指向随机存储位置。尝试使用它将导致未定义的行为。您需要为BMP
对象分配内存并将地址存储在此指针中。如果你希望你的对象在它离开函数后仍然存在,请使用original = new BMP();
(稍后不要忘记delete
)否则你可以直接执行BMP original;
并使用它。
答案 1 :(得分:2)
您已将BMP声明为指针但从未初始化它。
尝试使用:
BMP original;
或
BMP *original = new BMP();
第一种方法将在堆栈上创建原始文件,您不必释放它。第二种方法是在免费商店中创建它,你需要使用delete来释放它。
delete original;
答案 2 :(得分:1)
根据教程,您的代码应为:
BMP Image;
Image.ReadFromFile( argv[3] );
答案 3 :(得分:0)
没有必要使用指针试试这个:
// Load in.bmp
BMP original;
cout << "line " << __LINE__ << ": Got here!" << endl;
original.ReadFromFile("in.bmp"); //Error HERE!
int width = original.TellWidth();
int height = original.TellHeight();
cout << "line " << __LINE__ << ": Got here!" << endl;
或者如果你需要使用堆do:
BMP* original = new BMP();
当你完成后不要忘记释放内存
删除原文;