Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
On 04/02/2014 at 11:33, xxxxxxxx wrote:
User Information: Cinema 4D Version: R15 Platform: Windows ; Language(s) : C++ ;
--------- I have created a command plugin which creates a dialog and some objects. When I close cinema when the plugin is open, cinema crashes. It is ok when I close the plugin before closing cinema 4d.
Could it be, because I allocate objects, but never "free" thems? If so, where and what to free?
Or is main.cpp important? I almost commented out everything. Note: The plugin works fine.
BaseObject* sphere = BaseObject::Alloc(Osphere); sphere->SetName("Alloc test"); doc->InsertObject(sphere, nullptr, nullptr);
On 04/02/2014 at 15:22, xxxxxxxx wrote:
In such a case, I comment out everything, then successively add function by function, line by line, until it chrashes again.
On 05/02/2014 at 01:49, xxxxxxxx wrote:
Wouldn't it be easier to step through with the debugger and see exactly where it crashes?
Steve
On 05/02/2014 at 03:12, xxxxxxxx wrote:
I do not think I can step through with the debugger, because when closing down cinema 4d, I get a crash message. Strange enough I do not get it anymore. I'll try to find out, what changed and took away the crash.
On 05/02/2014 at 03:22, xxxxxxxx wrote:
Once you insert the sphere into a document, it becomes the property of the document. You do not need to free it yourself (unless you Remove() it from the document and take ownership).
I agree with ingvarai. Comment all code and uncomment section by section until you hone in on the culprit. The crash may be caused by something you never considered.
On 05/02/2014 at 04:18, xxxxxxxx wrote:
Aha. It only crashes when the plugin is open and the timeline is on/running (Play Forward). And indeed in the plugin I use frames to animated. Thanks for all the input.
On 05/02/2014 at 04:29, xxxxxxxx wrote:
Perhaps some more information. I have a command plugin and in MainDialog::Message I check current frame. If not equal to previous, I animate some object positions. I guess this is where it goes wrong.
Int32 MainDialog::Message(const BaseContainer& msg, BaseContainer& result) { Bool animate, addSphere; GetBool(2033,animate); if (animate) { Int32 frame, fps; BaseDocument* doc = GetActiveDocument(); fps = doc->GetFps(); frame = doc->GetTime().GetFrame(fps); //GePrint ("Message frame: " + String::IntToString(curframe)); if (frame != currentFrame) { currentFrame = frame; ....
On 05/02/2014 at 04:39, xxxxxxxx wrote:
After GetActiveDocument(), check:
if (!doc) return 0;
As C4D is closing, there may be no active document anymore.
On 05/02/2014 at 06:56, xxxxxxxx wrote:
Originally posted by xxxxxxxx After GetActiveDocument(), check: if (!doc) return 0; As C4D is closing, there may be no active document anymore.
Originally posted by xxxxxxxx
In fact, there is no document anymore, according to my experiences. In any case, it is a criminal not to check an objects existence, before making it do something. I think we have the cause nailed down!
On 06/02/2014 at 00:37, xxxxxxxx wrote:
Ok, clear and thanks. Again a lesson learned.
And indeed, that was the issue!