C++を面白くして、イメージを変更した後にイメージをロードすると、セグメンテーションフォルトが発生するという問題があります。私は何かが欠けているように感じますが、私はどこにいるのか分かりません。ここでバイナリファイルからイメージピクセルをロードするときのC++セグメンテーションフォールト
EDITは、(必要なすべてのヘッダファイルが含まれていることを前提とし)、両方のセーブとロード関数のコードです:
int Image::save(const char* filename)
{
if(filename == NULL)
{
return 1;
}
///*
ofstream outFile(filename, ios::out | ios::binary);
if (!outFile)
{
return 1;
}
outFile.write(reinterpret_cast<char*>(&cols), sizeof(unsigned int));
outFile.write(reinterpret_cast<char*>(&rows), sizeof(unsigned int));
outFile.write(reinterpret_cast<char*>(pixels), sizeof(uint8_t) * cols * rows);
outFile.close();
return 0;
}
int Image::load(const char* filename)
{
if(filename == NULL)
{
return 1;
}
///*
ifstream inFile(filename, ios::in | ios::binary);
if (!inFile)
{
return 1;
}
**//feels like the segmentation fault is happening here**
inFile.read(reinterpret_cast<char*>(&cols), sizeof(unsigned int));
inFile.read(reinterpret_cast<char*>(&rows), sizeof(unsigned int));
inFile.read(reinterpret_cast<char*>(pixels), sizeof(uint8_t) * cols * rows);
inFile.close();
return 0;
}
EDIT ここで私が働いているヘッダファイルがあります:
class Image {
public:
unsigned int cols;
unsigned int rows;
uint8_t* pixels;
...
/* Saves the image in the file filename. In a format that can be
loaded by load(). Returns 0 on success, else a non-zero error
code. */
int save(const char* filename);
/* Load an image from the file filename, replacing the current
image size and data. The file is in a format that was saved by
save(). Returns 0 success, else a non-zero error code . */
int load(const char* filename);
};
「ピクセル」とは何ですか? – vu1p3n0x
私はそれがおそらくあなたの書き込み機能の中にあると思います。 char *を使用しているときは、読み取り操作のみが許可されている可能性があります。それが私の最初の推測です。あなたはセーブメソッドだけをテストして、segフォルトを達成したかどうか確認できますか? –
デバッガでどこで起こったのか正確に調べてみませんか?また、行、列、ピクセルは何ですか?なぜ彼らは明らかにグローバルなのですか? – KjMag