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