Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Strange Crash Problem

    Scheduled Pinned Locked Moved SDK Help
    7 Posts 0 Posters 566 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 11/08/2006 at 10:42, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   9.603 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      Hi all

      i try to make a copy paste system for polygons.
      And i'm having some stability problems.

      Here is the code of the "copy" part. Sorry, i couln't simplify it anymore so that it still crashes.

        
        
      #include "c4d.h"  
      #include "c4d_symbols.h"  
        
      struct Clipboard  
      {  
      ~Clipboard() { TakeObjects(NULL); }  
      AutoAlloc<AtomArray> array;  
      void TakeObjects( AtomArray* a );  
      };  
        
      void Clipboard::TakeObjects( AtomArray* a )  
      {  
      if( !array ) return;  
      // free all stored objects  
      array->FilterObjectChildren();  
      for( LONG i=0; i<array->GetCount(); ++i )  
      {  
          BaseObject* op = static_cast<BaseObject*>( array->GetIndex(i) );  
          BaseObject::Free( op );  
      }   
      array->Flush();  
      GeAssert( array->GetCount()==0 );  
      // copy pointers from a to array  
      if( a ) a->CopyTo( array );  
      }  
        
        
      static Clipboard *g_clip = NULL;  
        
        
      void FreeClipboard()   
      {  
      gDelete( g_clip );  
      }  
        
      Clipboard* GetClipboard()   
      {  
      if( !g_clip ) {  
          g_clip = gNew Clipboard;  
      }  
      return g_clip;  
      }  
        
        
        
      Bool DoCopy( BaseDocument* doc )  
      {  
      Clipboard* clip = GetClipboard();  
      if( !clip ) return TRUE;  
        
      AutoAlloc<AtomArray> active;  
      doc->GetActivePolygonObjects( *active, TRUE );  
      if( active->GetCount()>0 )  
      {  
          ModelingCommandData md;  
          md.op = NULL;  
          md.arr = active;  
          md.doc = doc;  
          md.result = NULL;  
          md.mode = 0;  
          md.flags = 0;  
          md.result = NULL;  
          SendModelingCommand( MCOMMAND_SPLIT, md );   
          clip->TakeObjects( md.result );  
      }  
      else clip->TakeObjects( NULL );  
      return TRUE;  
      }  
        
        
      class MenuTest : public CommandData  
      {  
           public:  
                virtual Bool Execute(BaseDocument *doc);  
      };  
        
      Bool MenuTest::Execute(BaseDocument *doc)  
      {  
      DoCopy( doc );  
           return TRUE;  
      }  
        
      Bool RegisterMenuTest(void)  
      {  
           // decide by name if the plugin shall be registered - just for user convenience  
           String name=GeLoadString(IDS_MENUTEST); if (!name.Content()) return TRUE;  
           // be sure to use a unique ID obtained from www.plugincafe.com  
           return RegisterCommandPlugin(1000956,name,0,"icon.tif","C++ SDK Menu Test Plugin",gNew MenuTest);  
      }  
        
        
      //In main.cpp:  
        
      void FreeClipboard();  
        
      void PluginEnd(void)  
      {  
      FreeClipboard();  
      }  
        
      

      This code can crash reproducable when you do the following:

      Create c4d_debug.txt file, so C4d runns in debug mode.
      Run C4d.
      Make a cube.
      Make Editable.
      Make a HNWeightTag ( use hn weight tool on some edges )
      Select some polys
      Call the plug
      Quite Cinema
      ...
      BOOM... wtf..

      it only crashes if you run in debug mode, and have the HN tag. I suspect some memory becomes corrupted somehow.

      Okay this crash happens when you quit. But i'm also having other crashes which are harder to reproduce.

      I have no idea what is going on. Help ??!!

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 11/08/2006 at 12:31, xxxxxxxx wrote:

        hmm... if i use this...

          
        void Clipboard::TakeObjects( AtomArray* a )  
        {  
        if( !array ) return;  
        array->FilterObjectChildren();  
        for( LONG i=0; i<array->GetCount(); ++i )  
        {  
            BaseObject* op = static_cast<BaseObject*>( array->GetIndex(i) );  
            BaseObject::Free( op );  
        }   
        array->Flush();  
        GeAssert( array->GetCount()==0 );  
        if( a ) a->CopyTo( array );  
        for( LONG i=0; i<array->GetCount(); ++i )  
        {  
            BaseObject* op = static_cast<BaseObject*>( array->GetIndex(i) );  
            BaseTag *t;  
            while( t = op->GetTag( Tsds ) )  
            {  
              t->Remove();  
              BaseTag::Free( t );  
            }  
        }  
        }  
        

        ... the entire plug appears to work just fine.

        best regards
        Michael

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 17/08/2006 at 23:59, xxxxxxxx wrote:

          bump

          uhm.. mikael, can you reproduce ?

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 18/08/2006 at 14:05, xxxxxxxx wrote:

            Sorry, I thought that the last piece of code you posted was a fix. Perhaps I should take the time to actually read this thread through now... 🙂

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 19/08/2006 at 10:21, xxxxxxxx wrote:

              Yes please check it out. The code is no fix, it removes the HNWeight-Tags which seem to cause the problems. It should work with all kind of tags though.

              Thanks

              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 28/08/2006 at 01:31, xxxxxxxx wrote:

                You should use:

                C4DPL_ENDACTIVITY

                in PluginMessage otherwise (from the sdk docs) :

                Sent to all plugins before any PluginEnd() has been called. This allows you to close dialogs, end threads, delete temporary/undo buffers etc. In PluginEnd() it might crash as some resources from other plugins might already be freed.

                HTH.

                1 Reply Last reply Reply Quote 0
                • H Offline
                  Helper
                  last edited by

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 28/08/2006 at 02:53, xxxxxxxx wrote:

                  Thanks David.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post