|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.11.2019, 12:22 | #21 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
У вас в matr копии указателей из Arr. Вы их один раз удалили, но не за нулили, потом второй раз... Читайте дальше.
|
10.11.2019, 12:53 | #22 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
|
10.11.2019, 17:55 | #23 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 960
|
archerix, они там не построчно копируют, а указатели копируют. Осторожно надо с освобождением памяти
|
10.11.2019, 19:09 | #24 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Для человека, пока не привыкшего к таким опытам с памятью, все это выглядит как бред сумасшедшего - присвоили строку одной матрицы другой, да еще имеющие разный размер
|
10.11.2019, 19:38 | #25 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 960
|
"размерности" сходятся, точнее - типы.
int**Arr; - указатель на указатель matr - тоже Arr[i] - имеет тип int* matr - nоже копирование указателя matr[j]=Arr[j]; теперь matr[j] и Arr[j] указывают на один и тот же участок памяти поэтому, delete можно вызвать только один раз. Если вызвали delete [] Arr[j], то и память, на которую указывает сейчас matr[j] тоже освободилась. Получаем невалидный указатель. При попытке delete [] matr[j] получаем краш |
10.11.2019, 22:57 | #26 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Ну, вот, например, объявляем два динамических массива разного размера и присваиваем их строки друг другу - смотрим, все работает. Может, это неграмотная интерпретация, но так легче понять
Код:
|
11.11.2019, 07:59 | #27 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 960
|
присваиваются не строки, а копируются указатели. Но это ты просто память не освобождаешь в кучу, поэтому у тебя это "работает"
Попробуй после строки Arr1[0]=Arr[0]; удалить память массива Arr, потом проверь, как у тебя "работает" Arr1 |
11.11.2019, 10:51 | #28 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Уже поэкспериментировал
Если так, то в Arr1 потом содержится всякий мусор. Код:
Код:
Последний раз редактировалось archerix; 11.11.2019 в 11:59. |
11.11.2019, 12:32 | #29 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
То есть при удалении массива Arr "построчно" освобождается и занимаемая им память. А "приравненный" к нему массив Arr1 физически своей памяти не имеет, а берет значения из области памяти, выделенной для Arr. Потому после этого в его элементах появляется всякий случайный мусор.
Если написать только delete[] Arr, память не освобождается, судя по тому, что Arr1 продолжает выдавать осмысленные значения. Тут мне не очень понятно, есть ли большой смысл в таком частичном удалении матрицы минора в той программе детерминанта - дает ли это заметную экономию памяти или написано просто для порядка? Код:
Последний раз редактировалось archerix; 11.11.2019 в 12:36. |
11.11.2019, 12:37 | #30 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Цитата:
Цитата:
Нет. Потому что вы освободили память и там может быть что угодно. Какая память? Которая под Arr1 освобождается. |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Написать программу, которая создает динамическую матрицу размерности A[nxn] | Ivanrik | Общие вопросы C/C++ | 0 | 25.11.2018 09:03 |
сгенерировать матрицу размерности М х К из случайных вещественных чисел из интервала [-25,40] | AVIM | Общие вопросы C/C++ | 1 | 12.02.2016 23:00 |
Как передать параметр функции в const? | Mik92 | Общие вопросы Delphi | 8 | 01.12.2014 16:56 |
Заполнить матрицу Р размерности m x n значениями элементов вектора Q размерности k = m x n | Olevander | Помощь студентам | 0 | 23.11.2014 10:09 |
функция, способная сгенерировать массив любой размерности. | papapapokerface | Общие вопросы C/C++ | 2 | 03.06.2010 14:33 |