освобождение памяти с++

222
17 февраля 2018, 22:46

есть функция в ней я выделяю память под массив 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, которую я выделял в функции?

Answer 1

Операторы delete и delete[] оперируют адресами, которые им передаются в качестве указателей. Значение указателя x, полученное через new[] из функции возвращается и присваивается переменной p_x т.о. они хранят одинаковые адреса. А значит delete[] отработает именно на том адресе, который вернул new[].

Для самостоятельной проверки можете убедиться в эквивалентности адресов с помощью отладчика. Понятно, что до выхода из функции значение x нужно будет где-то запомнить, так как он станет недоступен в отладчике для непосредственного сравнения с p_x.

Answer 2

Освободится, потому что ты и удаляешь массив х. p_x - это лишь указатель на массив x, а не новый массив

READ ALSO
логическая ошибка в операторе функтора

логическая ошибка в операторе функтора

Мне нужно чтобы строка представляла рациональное число произвольной длины, а для этого пытаюсь исключать любой попавший там ненужный символЯ...

207
Создать Java Обновление программы

Создать Java Обновление программы

Всем приветСкажите пожалуйста как сделать обновление программы JavaFX desktop? Делать обновления с Ftp

263
Maven подключение конфигурационных файлов для Spring

Maven подключение конфигурационных файлов для Spring

Привет на данный момент структура моего проекта выглядит так

255
Обновление приложения через Push button

Обновление приложения через Push button

Во многих приложениях есть такая функция в меню,когда телефон подключен к интернету,вместе с основными кнопками,допустим в каком нибудь...

243