Use stack allocation for temporary flex rigidity storage in mj_setConst. Fixes #3081

PiperOrigin-RevId: 871200819
Change-Id: Ifbc1c0bd62261325a06a246cb2adb1106c02f829
This commit is contained in:
Alessio Quaglino
2026-02-17 02:14:33 -08:00
committed by Copybara-Service
parent 989b6e63c7
commit 8024124572
+9 -5
View File
@@ -589,9 +589,12 @@ static void set0(mjModel* m, mjData* d) {
mj_setM0(m, d);
// save flex_rigid, temporarily make all flexes non-rigid
mjtByte* rigid = mju_malloc(m->nflex);
memcpy(rigid, m->flex_rigid, m->nflex);
memset(m->flex_rigid, 0, m->nflex);
mjtByte* rigid = NULL;
if (m->nflex) {
rigid = mjSTACKALLOC(d, m->nflex, mjtByte);
memcpy(rigid, m->flex_rigid, m->nflex);
memset(m->flex_rigid, 0, m->nflex);
}
// run remaining computations
mj_tendon(m, d);
@@ -601,8 +604,9 @@ static void set0(mjModel* m, mjData* d) {
mj_transmission(m, d);
// restore flex rigidity
memcpy(m->flex_rigid, rigid, m->nflex);
mju_free(rigid);
if (m->nflex) {
memcpy(m->flex_rigid, rigid, m->nflex);
}
// restore camera and light mode
for (int i=0; i < m->ncam; i++) {