MotionMatching icon indicating copy to clipboard operation
MotionMatching copied to clipboard

Exception in Tags.cs with NativeArray

Open jhughes2112 opened this issue 6 months ago • 0 comments

                            int t2 = graph.Dequeue();
                            GetRangesFromGraphIndex(t1, out NativeArray<int> start1, out NativeArray<int> end1);
                            GetRangesFromGraphIndex(t2, out NativeArray<int> start2, out NativeArray<int> end2);
                            NativeArray<int> startResult;
                            NativeArray<int> endResult;
                            if ((Operation)v == Operation.Or)
                            {
                                Or(start1, end1, start2, end2, out startResult, out endResult);
                            }
                            else if ((Operation)v == Operation.And)
                            {
                                And(start1, end1, start2, end2, out startResult, out endResult);
                            }
                            else // if ((Operation)v == Operation.Diff)
                            {
                                Diff(start1, end1, start2, end2, out startResult, out endResult);
                            }
                            // Enqueue results
                            startRanges.Add(startResult);
                            endRanges.Add(endResult);
                            graph.Enqueue(Tags.Length + startRanges.Count - 1);

This block can be entered such that GetRangesFromGraphIndex creates default arrays for start and end, like so:

                        start = new NativeArray<int>();
                        end = new NativeArray<int>();
                        return false;

This immediately throws an exception as soon as one of these routines tries to copy it, because these default constructed arrays are not actually allocated under the hood. This is the proper way to allocate them:

                        start = new NativeArray<int>(0, Allocator.Temp);
                        end = new NativeArray<int>(0, Allocator.Temp);
                        return false;

As always, thanks for this great project!

jhughes2112 avatar Jul 21 '25 22:07 jhughes2112