Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 44
1

Как перезаписать двумерный динамический массив?

22.09.2018, 14:07. Показов 1589. Ответов 13

Здравствуйте! Проблема в том, что при перезаписи массива с большой разницей в строках и столбцах функция работает не правильно. В чем может быть причина? Т.е. если я пытаюсь перезаписать один массив в другой. Если я беру 4 и 5 (5,5; 6,8 т.е. близкие друг к другу числа) то всё работает. Но есть 2,20 то записывается мусор. Почему?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Копирование массива
int** CreatingAdditionaArray(int Lines, int Columns, int** arr) {
    int **b = new int*[Lines];
    for (int i = 0; i < Lines; i++) {
        b[i] = new int[Columns];
 
        for (int j = 0; j < Columns; j++) {
            b[i][j] = arr[i][j];
        }
    }
    return b;
}
 
// объявление массива такое:
 
int **arr = new int *[Lines];
    for (int i = 0; i < Lines; i++) {
        arr[i] = new int[Columns];
    }
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2018, 14:07
Ответы с готовыми решениями:

Как перезаписать ранее заполненный динамический массив?
Как перезаписать ранее заполненный динамический массив? Нужно сделать некую функцию редактирования,...

Как заполнить двумерный динамический массив?
Кто может объяснить , как создать динамический двумерный массив и записать в него элементы из...

Как заполнить двумерный динамический массив?
вот я создал двумерный динамический массив (правильно надеюсь): int row=2; for (int i=0; i&lt;dl;...

Как объявить двумерный динамический массив
int *matrix = new int ; че ругается ? а как сделать если без констант надо ?

13
Модератор
Эксперт С++
11309 / 9291 / 5573
Регистрация: 18.12.2011
Сообщений: 24,790
22.09.2018, 14:24 2
Цитата Сообщение от blizzark Посмотреть сообщение
5,5; 6,8
А как Вы можете брать такие числа для переменных типа int?
0
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 44
22.09.2018, 14:28  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
А как Вы можете брать такие числа для переменных типа int?
Я имею в виду разницу между количеством строк и столбцов. 5 строк 5 столбцов работает.
А если 2 строки и 20 столбцов то записывается мусор.

Добавлено через 2 минуты
Хммм.. а дело похоже не в функции. У меня не получается сделать динамический массив с такой большой разницей строк и столбцов.. В чем проблема сделать 2 строки и 20 столбцов? Я правильно объявляю?

C++
1
2
3
4
int **arr = new int *[numberOfLines];
    for (int i = 0; i < numberOfLines; i++) {
        arr[i] = new int[numberOfColumns];
    }
0
Модератор
Эксперт С++
11309 / 9291 / 5573
Регистрация: 18.12.2011
Сообщений: 24,790
22.09.2018, 14:28 4
Приведите код полностью, где-то что-то Вы перепутали....
1
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 44
22.09.2018, 14:32  [ТС] 5
Не знаю, что конкретно мне приводить.. У меня целый большой проект.
Ладно, попробую сам разобраться, спасибо!
0
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
22.09.2018, 14:35 6
Цитата Сообщение от blizzark Посмотреть сообщение
Ладно, попробую сам разобраться, спасибо!
эта мысль должна быть перед созданиям темы, если уж создали, то доводите до конца
0
165 / 108 / 57
Регистрация: 30.08.2018
Сообщений: 357
22.09.2018, 14:39 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Копирование массива
int** CreatingAdditionaArray(int Lines, int Columns, int** arr) {
    int **b = new int*[Lines];
    for (int i = 0; i < Lines; i++) {
        b[i] = new int[Columns];
 }
 
 for (int i = 0; i < Lines; i++) {
        for (int j = 0; j < Columns; j++) {
            b[i][j] = arr[i][j];
        }
    }
    return b;
}
0
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 44
22.09.2018, 14:42  [ТС] 8
JaponDemon, Нет. Похоже дело не в этой функции.

Добавлено через 1 минуту
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
int** CreatingAdditionaArray(int NumberOfLines, int NumberOfColumns, int** arr) {
    int **b = new int*[NumberOfLines];
    for (int i = 0; i < NumberOfLines; i++) {
        b[i] = new int[NumberOfColumns];
    }
    for (int k = 0; k<NumberOfLines; k++){
        for (int j = 0; j < NumberOfColumns; j++) {
            b[k][j] = arr[k][j];
        }
    }
    return b;
}
 
int Random_Input(int numberOfLines, int numberOfColumns, int** arr) {
    SetConsoleTextAttribute(hOUTPUT, LightGreen);
    for (int i = 0; i < numberOfLines; i++) {
        arr[i] = new int[numberOfLines];
        for (int j = 0; j < numberOfColumns; j++)
            arr[i][j] = rand() % 1000;
    }
    SetConsoleTextAttribute(hOUTPUT, LightGray);
    return **arr;
 
 
 
}
 
void User_Сhoice() {
 
    int numberOfLines;
    int numberOfColumns;
 
    cout << "Введите количество строк от " << MinSizeLines << " до " << MaxSize << ": ";
    numberOfLines = Integer_Check(MinSizeLines, MaxSize); // Функция проверки int
    cout << "Введите количество стообцов от " << MinSizeColumns << " до " << MaxSize << ": ";
    numberOfColumns = Integer_Check(MinSizeColumns, MaxSize);
 
    int **arr = new int *[numberOfLines];
    for (int i = 0; i < numberOfLines; i++) {
        arr[i] = new int[numberOfColumns];
    }
 
        Random_Input(numberOfLines, numberOfColumns, arr);
 
    cout << "Введённая матрица:" << endl;
    Output(numberOfLines, numberOfColumns, arr);
 
    CreatingAdditionaArray( numberOfLines, numberOfColumns,arr);
 
}
0
165 / 108 / 57
Регистрация: 30.08.2018
Сообщений: 357
22.09.2018, 14:43 9
Ну так и в этой тоже ошибка, это же не копия
Цитата Сообщение от blizzark Посмотреть сообщение
for (int j = 0; j < Columns; j++) { b[i][j] = arr[i][j]; }
1
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 44
22.09.2018, 14:45  [ТС] 10
Может дело в этой функции?
C++
1
2
3
4
5
6
7
8
9
10
11
12
// Случайное заполнение
int Random_Input(int Lines, int Columns, int** arr) {
 
    for (int i = 0; i < Lines; i++) {
        arr[i] = new int[Lines];
        for (int j = 0; j < Columns; j++)
            arr[i][j] = rand() % 1000;
    }
    
    return **arr;
 
}
0
165 / 108 / 57
Регистрация: 30.08.2018
Сообщений: 357
22.09.2018, 14:46 11
Лучший ответ Сообщение было отмечено blizzark как решение

Решение

В Random_Input
зачем
Цитата Сообщение от blizzark Посмотреть сообщение
arr[i] = new int[numberOfLines];
если массив уже создан?

Добавлено через 1 минуту
Цитата Сообщение от blizzark Посмотреть сообщение
return **arr;
Что вы пытаетесь вернуть?
1
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 44
22.09.2018, 14:47  [ТС] 12
Блин.. Как я мог не заметит? Спасибо большое!))

Добавлено через 26 секунд
Цитата Сообщение от JaponDemon Посмотреть сообщение
Что вы пытаетесь вернуть?
Да я знаю, что массив не нужно возвращать.. Просто так написал.
1
2 / 3 / 0
Регистрация: 24.07.2018
Сообщений: 8
22.09.2018, 14:47 13
Возможно перепутал местами строки и столбцы при вызове функции. Я по крайней мере регулярно это делаю...
0
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 44
22.09.2018, 14:48  [ТС] 14
Цитата Сообщение от kair_os Посмотреть сообщение
Возможно перепутал местами строки и столбцы при вызове функции. Я по крайней мере регулярно это делаю...
Не, с этим все хорошо. Объявил просто массив ещё раз случайно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2018, 14:48

Как создать динамический двумерный массив
Можно ли создать на С++ динамический двухмерный масив? Как? int z , x ; cin &gt;&gt; z ; cin &gt;&gt; x ;...

Как создать динамический двумерный массив
Динамический одномерный массив p можно сождать примерно так: int N, *p; cin &gt;&gt; N; p= new int ...

Как объявлять двумерный динамический массив
Доброго времени суток. При выделении памяти для динамического двумерного массива с разным...

Как создать двумерный динамический массив
Помогите, пожалуйста, в таком вопросе: нужно создать динамический двумерный массив. Да он еще...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.