C ++ EasyBMP指针问题

时间:2011-01-26 14:46:38

标签: c++ pointers memory-management segmentation-fault

以下代码导致.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)。但我似乎无法得到它。有什么帮助吗?

谢谢!

4 个答案:

答案 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();

当你完成后不要忘记释放内存

  

删除原文;