c4d crashes when plugin is open



  • 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.

    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!


Log in to reply