1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 13
|
||||||
1 | ||||||
Удаление колонки (столбца) из динамического двумерного массива25.10.2012, 00:49. Показов 21082. Ответов 20
Метки нет (Все метки)
Сколько ни пытался, не смог понять/придумать как удалить столбец. Строка удаляется элементарно, но как это сделать со столбцом? 30 строка.
0
|
25.10.2012, 00:49 | |
Ответы с готовыми решениями:
20
Корректное удаление двумерного динамического массива Правильное удаление динамического двумерного массива Удаление двумерного динамического массива MSVS Удаление двумерного динамического массива (матрицы) |
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
||||||
25.10.2012, 01:38 | 2 | |||||
1
|
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 13
|
|
25.10.2012, 11:31 [ТС] | 3 |
gray_fox, но это ведь только копирует все элементы, следующие за указанным столбцом, перенося их на столбец-1. Последний столбец остается в памяти. Как осуществить очистку памяти, выделенной под эти столбцы, используя операцию delete? Только скопировав данные в меньший массив, и удалив старый? Или все-таки есть другой способ?
Не по теме: Признаюсь, этот вариант лучше моей организации получаемого массива, потому что номера элементов идут по порядку, без пропуска на k столбце.
0
|
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
|
|
25.10.2012, 12:39 | 4 |
нету, дело в том что функция new выделяет ровно столько памяти сколько нужно под тип данных и их количество. Получается своеобразная страница. Очень похоже на память на жестком диске. В NTFS память разбита на кластеры или стеки (точно не помню) по 4 байта. В итоге даже если в этом кластере/стэке информация занимает 1 байт или даже 1 бит, все равно занимаемый стэк/кластер будет равен 4 байтам. Так и тут невозможно просто так затереть последние биты/бафты
1
|
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 13
|
||||||
25.10.2012, 16:26 [ТС] | 5 | |||||
MrGrig, понятно, спасибо.
Раз только так, то перебросить данные между массивами вышло, а очистка памяти под старый массив почему-то останавливается на 2 строке. Из-за чего это происходит? 50-ая строка
0
|
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
|
|
25.10.2012, 19:37 | 6 |
1
|
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 13
|
||||||
25.10.2012, 23:11 [ТС] | 7 | |||||
MrGrig, нет, то же самое, я пробовал.
Так же и с
0
|
Неэпический
|
||||||
25.10.2012, 23:15 | 8 | |||||
1
|
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 13
|
|
27.10.2012, 12:45 [ТС] | 9 |
Croessmah, может, я не туда вписал, но попытавшись вывести удаленный массив, оно так же вывело рандомные числа в первых двух столбцах (или строках, не помню), а остальные - те, что были.
За что оно вот так удаляет? Как уже только не пробовал. Это из-за 64-битной системы что ли?
0
|
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 13
|
||||||
27.10.2012, 17:51 [ТС] | 11 | |||||
Да все тот же, я логику не сильно изменил.
Кликните здесь для просмотра всего текста
0
|
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
|
|
27.10.2012, 18:31 | 12 |
поясните пожалуйста?
если честно я так и не понял что вы еще хотите, ведь вроде уже разобрались что просто так память подтереь нельзя? оО
1
|
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 13
|
|
27.10.2012, 19:27 [ТС] | 13 |
MrGrig, я уже осуществил копирование данных во второй массив, хочу целиком удалить первый, а он только некоторые элементы стирает.
0
|
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
|
|
27.10.2012, 20:11 | 14 |
1
|
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 13
|
|
28.10.2012, 03:27 [ТС] | 15 |
Идентичный кусок кода, а также с обратным циклом присутствуют в коде 11-ого сообщения. Ни вместе, ни по отдельности (они ж одинаковые, какая может быть разница) не сработали нормально. Результат показан на скриншоте 9-ого сообщения.
0
|
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
|
|
28.10.2012, 09:24 | 16 |
я уж и не знаю вас носом ткнуть чтоли?
во первых удаление ячеек идет в цикле а удаление массива идет после цикла раз!!!! во вторых ВЫ СКОБОЧКИ ПОСЛЕ ОПЕРАТОРА delete ВИДИТЕ?!?!?!!!! delete[] m[i];
1
|
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 13
|
|
29.10.2012, 03:44 [ТС] | 17 |
MrGrig, в тексте записана всего-навсего последняя попытка перед закрытием программы.
И без, и с квадратными, и с разными циклами пробовал, и сейчас еще раз перепроверил с [], но результат почти одинаковый всегда: то первые две строки, то первые два столбца удаляет, и то, в некоторых вариантах делает это частично. Не думаю, что есть какое-то объяснение и его опишут тут. Зато из темы 2 новых вещи узнал.
0
|
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
|
||||||
29.10.2012, 05:49 | 18 | |||||
1
|
1 / 1 / 0
Регистрация: 25.10.2012
Сообщений: 13
|
|
29.10.2012, 23:57 [ТС] | 19 |
С каждым новым сообщением в теме, код становится все компактнее и с еще меньшим количеством подключенных библиотек. И это радует.
это лучше,чем copy будет, даже std не нужно использовать. Вставил дополнительный вывод сразу после очистки m, перед присвоением новых значений элементам массива - результат (на прикрепленном скриншоте) заставляет меня думать, что это все из-за Dev C++, x64 или незнания какой-то вещи, объясняющей нормальность всего этого. Впрочем, задача решена, хотя я так и не понял причину "сломанного" delete.
0
|
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
|
|
30.10.2012, 08:08 | 20 |
у меня была одна небольшая проблема, которую я решил немного подумав, я выделял под массив массивов память n-1 а под сами массивы наоборот n в итоге программа постоянно вылетала с ошибкой попытки записи в левую память и вывод пустого пространства. Но в отладчике довольно быстро нашел эту проблему и вуаля
с самим переносом тоже пришлось по колдовать немного
1
|
30.10.2012, 08:08 | |
30.10.2012, 08:08 | |
Помогаю со студенческими работами здесь
20
Удаление двумерного динамического массива из памяти Удаление двумерного динамического массива символов Правильное удаление двумерного динамического массива ( нужен ли delete[] array ) Удаление строки или столбца из двумерного массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |