2016-01-29 1 views
0

В C++, я могу зарезервировать некоторую память, а затем удалить эту память, как:Невозможно освободить память для данного типа Maya

float *myFloat; 
myFloat = new float[10]; 
delete myFloat; --> Works fine 

Однако, если тип не является float * но MTransformationMatrix * (типа Maya) , то я не могу удалить:

MTransformationMatrix *myTransformationMatrixes; 
myTransformationMatrixes = new MTransformationMatrix[10]; 
delete myTransformationMatrixes; --> Crash 

Есть ли что-нибудь, что мне нужно для специальных типов, чтобы освободить память?

+0

'delete' what you' new' и 'delete []' what you 'new []'. –

ответ

3

Оба этих выделенных объектов массивы, вы должны использовать синтаксис delete[] для их удаления:

float *myFloat = new float[10]; 
delete[] myFloat; 

MTransformationMatrix *myTransformationMatrixes; 
myTransformationMatrixes = new MTransformationMatrix[10]; 
delete[] myTransformationMatrixes; 

Оба ваших примеров вызвать неопределенное поведение, вы просто повезло, что первый один не вызывает видимого вреда.

+1

Я бы рассмотрел первый вариант * un *, более удачный, чем второй. – user2079303

+0

@ user2079303: это спорный вопрос: если бы вы были пассажиром прохожего мимо и само вождение автомобиля не ломается, когда его всемогущий на борту контроллер выполняет первый, вы можете думать по-другому. – chqrlie

+1

Уверен, но мы не внедряем непроверенный код в производство, а теперь мы? Гораздо меньше людей, которые проектируют автомобили, управляющие собой. Я бы взял ошибку, которая сбой при первом тестировании по ошибке, которая не делает - но не гарантируется, что она не сработает - в любой день. К тому времени, когда он был выпущен, ошибка, приводящая к сбоям в самообслуживающем автомобиле, скорее всего, будет исправлена, чем ошибка, которая не произошла сбой при ее тестировании. – user2079303

1

Вы должны удалить массивы с помощью оператора delete[]. Используйте delete, когда выделяется только один объект, а не массив.

Когда вы используете неправильный, это приведет к неопределенному поведению.