Parallan Geschrieben 3. Februar 2007 Geschrieben 3. Februar 2007 Folgendes Problem: es werden an eine Funktion Parameter übergeben: cPicture *temppic = new cPicture; temppic->SetSize(11, 11); die Funktion hat den Sinn, den Speicherbereich zu vergrößern: class cPicture { void* pic; void SetSize(int newxsize, int newysize); }; void cPicture::SetSize(int newxsize, int newysize) { if(pic != NULL) pic = (SDL_Color*)realloc(pic, sizeof(SDL_Color)*(newxsize*newysize)); else pic = (SDL_Color*)malloc(sizeof(SDL_Color)*(newxsize*newysize)); if(pic == NULL) { cout << "couldn't malloc mem (" << newxsize << "x" << newysize << ")->" << newxsize*newysize << endl; return; } } ich bekomme als Ausgabe: "couldn't malloc mem (44x15)->660" bei anderen Zahlen funktioniert alles: zb. cPicture *temppic = new cPicture; temppic->SetSize(10, 11); Zitieren
Klotzkopp Geschrieben 3. Februar 2007 Geschrieben 3. Februar 2007 Wenn es mit größeren Zahlen als (44,15) auch klappt, hast du dir vermutlich irgendwo vorher bereits den Heap zerschossen, möglicherweise durch eine Überschreitung der Grenzen eines Arrays. Warum hantierst du eigentlich überhaupt mit malloc, wenn du C++ benutzt? Zitieren
Parallan Geschrieben 3. Februar 2007 Autor Geschrieben 3. Februar 2007 Du meinst als alternative einfach array erstellen? Der fehler trat eben mit diesen zahlen auf, ich hab dann noch probiert, obs mit konstanten geht, und mt denen giengs eben auch nicht Zitieren
Parallan Geschrieben 3. Februar 2007 Autor Geschrieben 3. Februar 2007 Und trozdem danke! muss ich halt weiter nach andren fehlern suchen Zitieren
Klotzkopp Geschrieben 3. Februar 2007 Geschrieben 3. Februar 2007 Du meinst als alternative einfach array erstellen?Nein, ich meine std::vector. Der nimmt dir die gesamte Speicherverwaltung ab. Bau einfach überall in deinem Programm, wo du einen Arrayzugriff hast, eine Prüfung ein, ob der Index gültig ist, dann sollte sich das Problem schnell erledigt haben. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.