Ich bekomme diesen Fehler (Speicherort variiert zwischen Läufen): Freigeben von Arbeitsspeicher! Image_Processing (6282,0x100091000) malloc: * Fehler für Objekt 0x1212121212121212: pointer befreit wird nicht zugewiesen wurde * einen Haltepunkt in malloc_error_break gesetztC++ falsche Prüfsumme für das freigegebene Objekt
in diesem Punkt zu debuggen stürzt: // m_Data löschen;
class Uint8Image {
public:
uint32_t m_w;
uint32_t m_h;
uint8_t *m_data;
Uint8Image(uint32_t w, uint32_t h): m_w(w), m_h(h), m_data(0)
{
m_data = new uint8_t(w*h);
}
Uint8Image(const Uint8Image &obj) ;
Uint8Image& operator = (const Uint8Image &D) {
if(this != &D)
{
delete [] m_data;
m_w= D.m_w;
m_h = D.m_h;
m_data=new uint8_t(m_w * m_h); // deep copy the pointer data
}
return *this;
}
~Uint8Image()
{
std::cout << "Freeing memory!"<< std::endl;
delete m_data; // it crashes here
m_data = NULL;
}
};
class MeniscusFinderContext {
public:
MeniscusFinderContext(uint32_t m_a, uint32_t m_b):
{
m_input_image = new Uint8Image(m_a,m_b);
}
~MeniscusFinderContext()
{
delete m_input_image;
m_input_image = NULL;
}
Uint8Image m_input_image;};
//The function that calls:
// Unter Eingabe durch Option-Parsing,
int main(int argc, char *argv[]{
const char *file_name = options[INPUT].arg;
std::ifstream file_stream(file_name,
std::ifstream::in | std::ifstream::binary);
char buf[256];
char *sEnd;
file_stream.getline(buf, sizeof(buf));
if(buf[0] != 'P' || buf[1] != '5') {
std::cerr << "invalid input PGM file" << std::endl;
return 1;
}
file_stream.getline(buf, sizeof(buf));
while(buf[0] == '#') file_stream.getline(buf, sizeof(buf));
uint32_t m_a = strtol(buf, &sEnd, 10);
uint32_t m_b = strtol(sEnd, &sEnd, 10);
MeniscusFinderContext M(m_a,m_b);
file_stream.getline(buf, sizeof(buf));
while(buf[0] == '#') file_stream.getline(buf, sizeof(buf));
if(atoi(buf) != 255) return 3;
file_stream.read((char *)M.m_input_image->m_data ,m_a * m_b);
if(!file_stream) {
std::cerr << "only got " << file_stream.gcount() << std::endl;
return 2;
}
file_stream.close();
return 0;
}
Edit: Ich bin es läuft und manchmal läuft es, während andere es mir den Fehler gibt. Scheint zufällig zu sein. Alle Hinweise wären sehr hilfreich. Ich habe bereits alle zugehörigen Antworten im Stack-Überlauf überprüft, konnte es aber nicht herausfinden.
Bitte versuchen Sie Ihren Post und Ihren Code neu zu formatieren, es ist wirklich schwer zu lesen. Um Code in Visual Studio neu zu formatieren, können Sie alle auswählen (Strg + A) und dann STRG + K + F drücken. – user2176127
user2176127 ist es jetzt in Ordnung? –
'm_data = neu uint8_t (m_w * m_h); // tiefe Kopie der Zeigerdaten 'kopiert nichts. –