С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 45

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

22.09.2018, 14:07. Показов 3612. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.09.2018, 14:07
Ответы с готовыми решениями:

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

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

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

13
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
22.09.2018, 14:24
Цитата Сообщение от blizzark Посмотреть сообщение
5,5; 6,8
А как Вы можете брать такие числа для переменных типа int?
0
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 45
22.09.2018, 14:28  [ТС]
Цитата Сообщение от 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
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
22.09.2018, 14:28
Приведите код полностью, где-то что-то Вы перепутали....
1
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 45
22.09.2018, 14:32  [ТС]
Не знаю, что конкретно мне приводить.. У меня целый большой проект.
Ладно, попробую сам разобраться, спасибо!
0
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
22.09.2018, 14:35
Цитата Сообщение от blizzark Посмотреть сообщение
Ладно, попробую сам разобраться, спасибо!
эта мысль должна быть перед созданиям темы, если уж создали, то доводите до конца
0
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
22.09.2018, 14:39
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
Сообщений: 45
22.09.2018, 14:42  [ТС]
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
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
22.09.2018, 14:43
Ну так и в этой тоже ошибка, это же не копия
Цитата Сообщение от blizzark Посмотреть сообщение
for (int j = 0; j < Columns; j++) { b[i][j] = arr[i][j]; }
1
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 45
22.09.2018, 14:45  [ТС]
Может дело в этой функции?
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
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
22.09.2018, 14:46
Лучший ответ Сообщение было отмечено blizzark как решение

Решение

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

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

Добавлено через 26 секунд
Цитата Сообщение от JaponDemon Посмотреть сообщение
Что вы пытаетесь вернуть?
Да я знаю, что массив не нужно возвращать.. Просто так написал.
1
2 / 3 / 0
Регистрация: 24.07.2018
Сообщений: 8
22.09.2018, 14:47
Возможно перепутал местами строки и столбцы при вызове функции. Я по крайней мере регулярно это делаю...
0
2 / 2 / 0
Регистрация: 09.06.2018
Сообщений: 45
22.09.2018, 14:48  [ТС]
Цитата Сообщение от kair_os Посмотреть сообщение
Возможно перепутал местами строки и столбцы при вызове функции. Я по крайней мере регулярно это делаю...
Не, с этим все хорошо. Объявил просто массив ещё раз случайно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.09.2018, 14:48
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru