X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fcanvas.cpp;h=66d3d06f094312e0e3ed6c305fb8e3f61e059cbe;hb=13468222677bf3e31d445144621d983a4094c6bb;hp=c51507a0607fe11505b72b3b832cbe58cca3841d;hpb=bec46bc8d42dab13851b47714c1095d8c8f9f9c3;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/canvas.cpp b/synfig-core/trunk/src/synfig/canvas.cpp index c51507a..66d3d06 100644 --- a/synfig-core/trunk/src/synfig/canvas.cpp +++ b/synfig-core/trunk/src/synfig/canvas.cpp @@ -94,9 +94,16 @@ Canvas::~Canvas() // refering to a canvas after it had been destroyed; this code // will stop the pastecanvas layers from refering to the canvas // before the canvas is destroyed - for (std::set::iterator iter = parent_set.begin(); iter != parent_set.end(); iter++) + + // the set_sub_canvas(0) ends up deleting the parent-child link, + // which deletes the current element from the set we're iterating + // through, so we have to make sure we've incremented the iterator + // before we mess with the pastecanvas + std::set::iterator iter = parent_set.begin(); + while (iter != parent_set.end()) { Layer_PasteCanvas* paste_canvas = dynamic_cast(*iter); + iter++; if(paste_canvas) paste_canvas->set_sub_canvas(0); else