Почему происходит сбой Matlab, когда я использую delete []? - PullRequest
0 голосов
/ 18 февраля 2011

Я пишу два mex-файла Matlab, которые обрабатывают некоторую постоянную память. В основном я хочу сделать это

A *a = new A[n];

и затем освободите память, когда я закончу, используя

delete[] a;

Это делается с помощью двух отдельных вызовов функции mex. Проблема в том, что оператор delete [] выдает Matlab с ошибкой сегментации. Однако, если я зарезервирую память с помощью malloc, все будет работать нормально:

A *a = (A *) malloc(n*sizeof(A));
a = new(a) [n];

и потом, когда я закончу

free(a);

Есть идеи, почему это происходит? Как правильно решить эту ситуацию?

Редактировать: Оглядываясь на код, я понимаю, что на самом деле я не говорил правду выше. То, что я делал, было что-то вроде

A *a = new B[n];

, а затем

delete[] a;

где B был получен из A. Теперь я обнаружил, что это приводит к неопределенному поведению ...

...