1
0
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-18 11:19:10 +00:00

Fix pyMatrix44 memory leak

This commit is contained in:
2014-04-26 17:35:35 -04:00
parent 5672bcb57e
commit 133098c18e
4 changed files with 11 additions and 8 deletions

View File

@ -50,6 +50,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
// Standard Library Includes
#include <algorithm>
#include <array>
#include <exception>
#include <locale>
#include <string>

View File

@ -132,9 +132,9 @@ PyObject* pyMatrix44::GetRightAxis() const
return pyVector3::New(fMatrix.GetAxis(hsMatrix44::kRight));
}
float* pyMatrix44::GetData() const
mat44_t pyMatrix44::GetData() const
{
float *res = new float[4*4];
mat44_t res;
res[0] = fMatrix.fMap[0][0]; res[1] = fMatrix.fMap[0][1]; res[2] = fMatrix.fMap[0][2]; res[3] = fMatrix.fMap[0][3];
res[4] = fMatrix.fMap[1][0]; res[5] = fMatrix.fMap[1][1]; res[6] = fMatrix.fMap[1][2]; res[7] = fMatrix.fMap[1][3];
res[8] = fMatrix.fMap[2][0]; res[9] = fMatrix.fMap[2][1]; res[10] = fMatrix.fMap[2][2]; res[11] = fMatrix.fMap[2][3];

View File

@ -42,12 +42,14 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#ifndef pyMatrix44_h_inc
#define pyMatrix44_h_inc
#include <array>
#include "hsMatrix44.h"
#include "pyGlueHelpers.h"
class pyPoint3;
class pyVector3;
typedef std::array<float, 4*4> mat44_t;
class pyMatrix44
{
@ -93,7 +95,8 @@ public:
PyObject* GetUpAxis() const; // returns pyVector3
PyObject* GetRightAxis() const; // returns pyVector3
float* GetData() const;
/** Returns a copy of the 4x4 matrix data */
mat44_t GetData() const;
void SetData(const float mat[]);
};

View File

@ -41,6 +41,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
*==LICENSE==*/
#include <Python.h>
#include "pyGeometry3.h"
#include "pyMatrix44.h"
#pragma hdrstop
@ -302,21 +303,19 @@ PYTHON_METHOD_DEFINITION_NOARGS(ptMatrix44, right)
PYTHON_METHOD_DEFINITION_NOARGS(ptMatrix44, getData)
{
float *mat = self->fThis->GetData();
mat44_t mat = self->fThis->GetData();
PyObject *retVal = Py_BuildValue("(ffff)(ffff)(ffff)(ffff)",
PyObject* retVal = Py_BuildValue("(ffff)(ffff)(ffff)(ffff)",
mat[0], mat[1], mat[2], mat[3],
mat[4], mat[5], mat[6], mat[7],
mat[8], mat[9], mat[10], mat[11],
mat[12], mat[13], mat[14], mat[15]);
if (retVal == NULL)
{
if (!retVal) {
PyErr_SetString(PyExc_TypeError, "setData expects a 4x4 tuple of floats");
PYTHON_RETURN_ERROR;
}
delete mat;
return retVal;
}