2011-01-26 68 views
1

下面的代碼使段錯誤的.ReadFromFile行:C++ EasyBMP指針問題

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庫,它包含的主要功能的上方。我知道它與內存和指針有關,但我無法弄清楚用什麼來代替「原始 - >」......我試過(*原創)。和(&原創)。但我似乎無法得到它。任何幫助?

謝謝!

回答

2

你的指針original指向一個隨機的內存位置。試圖使用它會導致未定義的行爲。您需要爲對象分配內存並將地址存儲在此指針中。如果你希望你的對象在使用original = new BMP();(不要忘了delete它稍後,但它可以直接做BMP original;並使用它)功能退出後仍然存在。

1

按照教程,你的代碼應該是:

BMP Image; 
Image.ReadFromFile(argv[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; 

,或者如果你需要使用堆做:

BMP* original = new BMP(); 

,當你完成後別忘了免費內存

刪除原創;

2

您已經將BMP聲明爲指針,但從未初始化它。

嘗試使用:

BMP original; 

BMP *original = new BMP(); 

第一種方法會在棧上創建原創,你不會有將其釋放。第二種方法在免費商店中創建它,並且您需要使用delete來釋放它。

delete original;