есть функция в ней я выделяю память под массив x, провожу вычисления, далее возвращаю
double* kramer(double** mat, double* y, int size) {
double d = det(mat, size);
double* x = new double[size];
for (int i = 0; i < size; i++)
x[i] = det(get_mat(mat, y, i, size), size) / d;
return x;
}
потом в основной программе вызываю функцию
double* p_x = kramer(m, y, s);
и удаляю p_x
delete[]p_x;
Вопрос: у меня высвободится память из под массива x, которую я выделял в функции?
Операторы delete и delete[] оперируют адресами, которые им передаются в качестве указателей. Значение указателя x, полученное через new[] из функции возвращается и присваивается переменной p_x т.о. они хранят одинаковые адреса. А значит delete[] отработает именно на том адресе, который вернул new[].
Для самостоятельной проверки можете убедиться в эквивалентности адресов с помощью отладчика. Понятно, что до выхода из функции значение x нужно будет где-то запомнить, так как он станет недоступен в отладчике для непосредственного сравнения с p_x.
Освободится, потому что ты и удаляешь массив х. p_x - это лишь указатель на массив x, а не новый массив
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости