Форум программистов, компьютерный форум CyberForum.ru

Удаление строки из двумерного массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.95
_Eldar_
 Аватар для _Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
14.11.2009, 13:25     Удаление строки из двумерного массива #1
Привет всем). Подскажите пожалуйста как удалить строку из двумерного массива, Я объявил динамический массив. Нахожу нулевую строку, опускаю ее вниз и в конце уменьшаю переменную содержащую количество строк на 1, чтоб при выводе не показывать ее(нулевую строку). А как удалить саму строку из памяти? Я попробовал так delete [номер_строки] array, компилятор вернул предупреждение((
W8016 Array size for 'delete' ignored

Добавлено через 12 минут
Объявил массив таким образом
C++
1
2
3
int **array = new int *[nrow];
   for(i=0; i<nrow; i++)
      array[i] = new int [ncol];
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2009, 13:25     Удаление строки из двумерного массива
Посмотрите здесь:

От значений элементов каждой строки двумерного массива вычесть значение минимального элемента этой строки C++
C++ Удаление строки или столбца из двумерного массива
C++ Правильное удаление двумерного динамического массива ( нужен ли delete[] array )
C++ удаление элементов из двумерного массива
Удаление колонки (столбца) из динамического двумерного массива C++
Найти номер строки и столбца двумерного массива для минимального элемента этого массива C++
Правильное удаление динамического двумерного массива C++
C++ Удаление двумерного динамического массива из памяти
Удаление двумерного динамического массива MSVS C++
Удаление двумерного динамического массива (матрицы) C++
Удаление строк из двумерного массива C++
Корректное удаление двумерного динамического массива C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
14.11.2009, 13:46     Удаление строки из двумерного массива #2
C++
1
delete [номер_строки] array
Там не номер строки нужен,а размер массива.То есть получается,что когда ты вызываешь delete,у тебя вся область памяти освобождается.(С утечкой)
Раз ты выделяешь память в цикле,тебе удалять тоже нужно в цикле.Если не ошибаюсь,так:
C++
1
2
for(i=0; i<nrow; i++)
    delete  array[i];
и уже после этого
C++
1
delete array
Да,и этим ты не удаляешь строку,а освобождаешь память для повторного использования.То есть после этого туда могут быть записаны данные.
Тебе наверное,нужно уменьшить размер массива?
Тогда можешь использовать дополнительный массив с другой размерностью,или используй контейнеры C++ (http://www.cplusplus.com/reference/)
_Eldar_
 Аватар для _Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
14.11.2009, 14:16  [ТС]     Удаление строки из двумерного массива #3
Спасибо! сейчас посмотрю)

Добавлено через 24 минуты
Теперь у меня происходит останов программы(((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <windows.h>
 
int main(){
 
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
 
   int nrow,ncol,i,j;
   fstream fin("d:\\c++\\work_doc\\input.txt");
   if(!fin){
      cout <<"Файл не найден";
      return 1;
   }
   /* Содержимое файла input.txt
 
     5 6
 
     0 -1 -0  5  4  8
     0  0  0   0  0  0
     0 -9  0 -4 -7  4
     0  6  0  -1  9  7
     0 -9  0 -4 -7  6
 
   */
   fin >> nrow >> ncol;
   int **array = new int *[nrow];
   for(i=0; i<nrow; i++)
      array[i] = new int [ncol];
 
   for(i=0; i<nrow; i++)
      for(j=0; j<ncol; j++)
         fin >> array[i][j];
 
   for(i=0; i<nrow; i++){
      cout << "\n\n";
      for(j=0; j<ncol; j++){
         cout << setw(3) << array[i][j];
      }
   }
 
   bool flag;
   for(i=0; i<nrow; i++){
      flag = true;
      for(j=0 ;j<nrow; j++){
         if(array[i][j] != 0){
            flag = false;
            break;
         }
      }
      if(flag){//если строка нулевая
         for(int k=i; k<nrow-1; k++){
            for(j=0; j<ncol; j++){
               array[k][j] = array[k+1][j];
            }
         }
         //удаление из памяти
         for(j=0; j<ncol; j++){
            delete array[nrow];
         }
      nrow--;
      }
   }
  cout << "\n\n\n\n";
 
  //закоментил переменную чтоб посмотреть что в последней строке мусор
  for(i=0; i<5/*nrow*/; i++){
      cout << "\n\n";
      for(j=0; j<ncol; j++){
         cout << setw(3) << array[i][j];
      }
   }
 
   return 0;
}
Yandex
Объявления
14.11.2009, 14:16     Удаление строки из двумерного массива
Ответ Создать тему
Опции темы

Текущее время: 04:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru