2011-01-26 2 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; 

Iは、主な機能の上に含まれているEasyBMPライブラリを使用しています。私はそれがメモリとポインタと関係があることを知っていますが、私は "オリジナル - >"の代わりに何を使うべきかを理解できません。 (&オリジナル)。しかし、私はそれを得るように見えることはできません。どんな助け?

ありがとうございます!

答えて

2

あなたのポインタ。それを使用しようとすると、未定義の動作が発生します。 BMPオブジェクトにメモリを割り当て、このポインタにアドレスを格納する必要があります。関数から外に出た後でもオブジェクトを保持したい場合は、original = new BMP();(後でdeleteを忘れないでください)以外の場合は、BMP original;を直接使用して使用してください。

1

チュートリアルによると、あなたのコードは次のようになります。ランダムメモリ位置を指しているoriginal

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

第1の方法は、スタック上のオリジナルを作成し、あなたがそれを解放する必要はありません。 2番目の方法は、フリーストアでそれを作成するため、削除を使用して解放する必要があります。

delete original;