Ich mache ein paar C++ Spaß und habe ein Problem, wenn ich ein Bild nach einigen Änderungen an das Bild laden, gibt es mir Segmentierung Fehler. Ich fühle mich, als würde ich etwas vermissen, aber ich weiß nicht wo.C++ Segmentierung Fehler beim Laden von Bildpixeln aus Binärdatei
EDIT Hier ist der Code für die beiden Speicher- und Ladefunktion (unter der Annahme, dass alle notwendigen Header-Dateien enthalten sind):
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 Hier ist die Header-Datei, die ich mit Arbeit bin:
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);
};
Was ist 'Pixel'? – vu1p3n0x
Ich denke, es ist wahrscheinlich in Ihren Schreibfunktionen innerhalb speichern. Wenn Sie char * verwenden, dürfen nur Leseoperationen zulässig sein. Das ist meine erste Vermutung. Können Sie nur die Speichermethode testen und sehen, ob Sie einen Seg-Fehler erreichen? –
Warum überprüfen Sie nicht einfach genau, wo es mit einem Debugger passiert? Was sind übrigens Zeilen, Spalten und Pixel? Und warum sind sie scheinbar global? – KjMag