Я пишу два 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. Теперь я обнаружил, что это приводит к неопределенному поведению ...