Provide easy-to-use, extensible software for modeling, simulating, controlling, and analyzing the neuromusculoskeletal system.
-
Jack Zhao
- Posts: 94
- Joined: Thu Jul 24, 2014 7:15 am
Post
by Jack Zhao » Fri Feb 16, 2018 3:52 am
Dear All:
Code: Select all
int ny = osimModel.getNumStateVariables();
Array<std::string> statNames("", ny);
statNames = osimModel.getStateVariableNames();
The above code is in a
mex function called within
MATLAB .
When this code is implemented after
multiple (certain amount of) times, the
Array<string> destructor will incur an exception at the following line when the whole program finishes at '}':
Code: Select all
virtual ~Array()
{
if(_array!=NULL) { delete[] _array; _array = NULL; } //exception happens here
}
Whether it is caused by two pointers that point to the same memory space, while one in the "OpenSim::Model object" has been destructed but the other in "statNames" array object still intends to delete the space ? How should we solve it?
Best regards
Jack
-
Thomas Uchida
- Posts: 1792
- Joined: Wed May 16, 2012 11:40 am
Post
by Thomas Uchida » Tue Feb 20, 2018 1:23 pm
Do you get the same exception if the code is run without being embedded in a mex function? It might help your debugging efforts to know whether the issue is specific to the mex function implementation.
-
Jack Zhao
- Posts: 94
- Joined: Thu Jul 24, 2014 7:15 am
Post
by Jack Zhao » Fri Feb 23, 2018 10:12 pm
tkuchida wrote:Do you get the same exception if the code is run without being embedded in a mex function? It might help your debugging efforts to know whether the issue is specific to the mex function implementation.
Dear Tom:
Thanks so much for the reply, and I will go on try it accordingly.
Regards
-
Jack Zhao
- Posts: 94
- Joined: Thu Jul 24, 2014 7:15 am
Post
by Jack Zhao » Thu Jul 19, 2018 9:02 am
Dear Thomas:
Thank you so much for your reply! While this problem in MATLAB still exists. When the mex function end after '}' of the function, the Array object will incur error causing MATLAB to end. I have tried multiple methods but has yet solved it.
Best regards
Jack
-
Thomas Uchida
- Posts: 1792
- Joined: Wed May 16, 2012 11:40 am
Post
by Thomas Uchida » Fri Jul 20, 2018 12:16 pm
When the mex function end after '}' of the function, the Array object will incur error causing MATLAB to end. I have tried multiple methods but has yet solved it.
It will be very difficult for someone else to debug your mex function without diving into your code. In your original post, you stated that "When this code is implemented after multiple (certain amount of) times...". I would have some hypotheses if the exception were always thrown on the
second iteration, but if it's thrown after "multiple" iterations, it's somewhat more nebulous. Perhaps a race condition where destructors are called in an unexpected order? To circumvent the issue, you might try calling getStateVariableNames() and then immediately transferring the data into your own container.