GeDynamicArray access violation



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

    On 17/12/2007 at 01:24, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   9.5+ 
    Platform:   Windows  ; Mac  ;  Mac OSX  ; 
    Language(s) :

    ---------
    Greetings,

    I have a rather strange problem. I'm using GeDynamicArray (GeDynamicArray<Real> data;) in some class (layer_graph_data), and it seems to crash when c4d wants to free it. The funny thing is, it crashes only when using layer_graph_data as a pointer, eg. layer_graph_data* a=new layer_graph_data(); delete(a); and only if it's created in another class (layer_data in my example, which is allocated in the main ObjectData class), but works quite fine when allocated in the main class. And it works just fine with layer_graph_data a; in either of those two examples.

    Debugger says the exception happens in
    GeFree(ptr); of template<class TYPE> void GeDynamicArray<TYPE>::Free(void) in ge_dynamicarray.h.

    Any ideas why this might happen?

    Thanks,
    Miha



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

    On 17/12/2007 at 01:52, xxxxxxxx wrote:

    No clear idea what might cause the crash without seeing your source code. Just remember to use Cinema's own allocation functions (bNew, bDelete, gNew, gDelete etc.) whenever possible.

    cheers,
    Matthias



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

    On 17/12/2007 at 02:21, xxxxxxxx wrote:

    _
    > #pragma once
    >
    > #include "c4d.h"
    > #include "ge_dynamicarray.h"
    >
    >
    > class layer_graph_data {
    > private:
    >      GeDynamicArray<Real> data;
    >      LONG size;
    >
    >      LONG channel;
    >
    >
    >      LONG delay;
    >
    > public:
    >      layer_graph_data(void);
    >      layer_graph_data(LONG _channel);
    >      ~layer_graph_data(void);
    >
    > };
    >
    > layer_graph_data::layer_graph_data(void) {
    >      size=0;
    >      delay=0;
    >      channel=0;
    > }
    >
    > layer_graph_data::layer_graph_data(LONG _channel) {
    >      size=0;
    >      channel=_channel;
    >      delay=0;
    > }
    >
    > layer_graph_data::~layer_graph_data(void) {
    >
    > }
    >
    >
    >
    > #include "c4d.h"
    > #include "layer_graph_data.h"
    >
    > class layer_data
    > {
    >
    > private:
    >      Real max;
    >      String name;
    >      LONG channel;
    >      Vector namebox;
    >
    >      Real exp;
    >
    >      layer_graph_data* graph_data;
    >
    > public:
    >      Vector corner_LT, corner_RB, off1, off2;
    >      Bool selected;
    >
    > public:
    >
    > public:
    >      layer_data(void);
    >      layer_data(Vector _corner_LT, Vector _corner_RB);
    >      ~layer_data(void);
    > };
    >
    >
    >
    > #include "Layer.h"
    >
    > layer_data::layer_data(void)
    > {
    >      graph_data=gNew layer_graph_data();
    >
    >      graph_data->setChannel(channel);
    >      exp=2;
    > }
    >
    > layer_data::~layer_data(void)
    > {
    >      gDelete(graph_data);
    > }
    >
    > layer_data::layer_data(Vector _corner_LT, Vector _corner_RB)
    > {
    >      graph_data=gNew layer_graph_data();
    >
    >      corner_LT = _corner_LT;
    >      corner_RB = _corner_RB;
    >
    >      graph_data->setChannel(channel);
    >      exp=2;
    > }
    > _

    in the main plugin class layer_data is used

    > _
    > private:
    > GeDynamicArray <layer_data> layer_store;
    >
    > Bool Init(GeListNode *node) {
    > layer_store.Push(layer_data(Vector(0.1,0.1,0),Vector(0.2,0.3,0)));
    >      layer_store.Push(layer_data(Vector(0.3,0.4,0),Vector(0.4,0.6,0)));
    >      layer_store.Push(layer_data(Vector(0.2,0.2,0),Vector(0.3,0.8,0)));
    > }
    > _

    hope this makes sense. :)



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

    On 17/12/2007 at 02:37, xxxxxxxx wrote:

    Ok now that is weird. When i changed GeDynamicArray_<_layer_data_>_ layer_store; to GeDynamicA_<_layer_data*_>_ta*> layer_store; and used gNew and gDelete on its elements it resolved itself...



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

    On 17/12/2007 at 05:50, xxxxxxxx wrote:

    I also encountered crashes with GeDynamicArray some time ago, however only in a multiprocessor context and when trying to change the stacked array during MP processing (for example during rendering).


Log in to reply