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

Двумерный динамический массив (поиск ошибки)

03.03.2019, 11:24. Показов 1251. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу найти ошибку. Думаю, что она заключается в неправильном изменении индексации. Есть еще один интересный момент. Если запускать отладку в 64 битной конфигурации, то возникает ошибка на этапе вывода массива на экран (создание точки останова (выхожу за границы? как это исправить?)), а если установить 86 битную, то возникает ошибка "Кадр не находится в модуле". Можете объяснить на что конкретно влияет конфигурация? я не до конца понимаю этот момент, только на размер памяти в типах данных?.
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
78
79
80
81
82
/*Дан двумерный массив из N строк и M столбцов.
Определить для каждой строки минимальный элемент.
Среди этих элементов найти максимальный.*/
 
#include "stdafx.h"
#include <iostream>
#include "stdio.h"
#include <time.h>
#include <stdlib.h>
 
using namespace std;
 
int main()
{
    srand(time(0));
    setlocale(LC_ALL, "Russian");
    int n, m, elem;
    const int index = 1;
    cout << "Введите количество строк массива: ";
    cin >> n;
    cout << "Введите количество столбцов массива: ";
    cin >> m;
    /*int **p = new int *[n];*/
    int **p = (int**)malloc(n * sizeof(int));
    for (int i = 0; i < n; i++)
    {
        p[i] -= index;
    }
    p -= index;
    for (int i = index; i < n + index; i++)
    {
        p[i] = (int*)malloc(m * sizeof(int));
        for (int j = index; j < m+index; j++)
        {
            elem = rand() % 10;
            p[i][j] = elem;
            cout << p[i][j] << " ";
        }
        cout << endl;
    }
    int min, max = -1, k;
    for (int i = index; i < n + index; i++)
    {
        for (int j = index; j < m + index; j++)
        {
            min = p[i][j];
            if (p[i][j] < min)
            {
                min = p[i][j];
            }
        }
        if (min > max)
        {
            max = min;
            k = i;
        }
        cout << "Минимальный элемент в " << i << "-ой строке: " << min << endl;
    }
    cout << "Максимальный среди минимальных находится в " << k << "-ой строке: " << max << endl;
 
    for (int i = 0; i < n; i++)
    {
        p[i] += index;
    }
    p += index;
    for (int i = 0; i <= n; i++)
    {
        free(p[i]);
        p[i] = NULL;
    }
    free(p);
    p = NULL;
    /*for (int i = 0; i < n; i++)
    {
    p[i]-=index;
    delete[](p[i]);
    }
    p-=index;
    delete[](p);*/
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2019, 11:24
Ответы с готовыми решениями:

Добавление строки в двумерный динамический массив (исправить ошибки)
Выкладываю лаб. Помогите исправить ошибки в функции с добавлением строки в двумерный динамический массив , уже противно смотреть эту на...

Объявить и заполнить двумерный динамический массив случайными числами от 10 до 50 - исправить ошибки в коде
Здравствуйте есть задача 3:http://http://purecodecpp.com/archives/1284 #include&lt;iostream&gt; using namespace std; int ny,my,i,n,rez,qwa;...

Найти причины возникновения ошибок в коде и исправить эти ошибки (динамический двумерный массив)
Подскажите пожалуйста,что я упустила, где шибка? #include &lt;iostream&gt; using namespace std; void main() { int n=0; int...

12
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
03.03.2019, 11:37
Цитата Сообщение от Debug_ Посмотреть сообщение
C++
1
p -= index;
Цитата Сообщение от Debug_ Посмотреть сообщение
C++
1
p[i] -= index;
это зачем?
0
0 / 0 / 0
Регистрация: 03.03.2019
Сообщений: 7
03.03.2019, 11:43  [ТС]
сдвиг индексации
0
 Аватар для JohnBlack123
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
03.03.2019, 11:45
Если решать задачу в лоб, то так. for'ы можете скомбинировать.
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
int n; cout << " Enter n = "; cin >> n;
int m; cout << " Enter m = "; cin >> m;
 
int **p = new int *[n];
 
for (int i = 0; i < n; i++)
    p[i] = new int[m];
    
for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
        p[i][j] = rand() % 10;
 
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << " " << p[i][j];
    }
    cout << endl;
}
 
int *min = new int[n];
for (int i = 0; i < n; i++) {
    min[i] = p[i][0];
    for (int j = 0; j < m; j++) {
        if (p[i][j] < min[i])
            min[i] = p[i][j];
    }
}
 
for (int i = 0; i < n; i++)
    cout << " " << min[i];
cout << endl;
 
int max = min[0];
for (int i = 0; i < n; i++)
    if (min[i] > max)
        max = min[i];
 
cout << " max : " << max << endl;
 
for (int i = 0; i < n; i++)
    delete[] p[i];
delete[] p;
0
0 / 0 / 0
Регистрация: 03.03.2019
Сообщений: 7
03.03.2019, 11:49  [ТС]
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
Если решать задачу в лоб, то так. for'ы можете скомбинировать.
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
int n; cout << " Enter n = "; cin >> n;
int m; cout << " Enter m = "; cin >> m;
 
int **p = new int *[n];
 
for (int i = 0; i < n; i++)
    p[i] = new int[m];
    
for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
        p[i][j] = rand() % 10;
 
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << " " << p[i][j];
    }
    cout << endl;
}
 
int *min = new int[n];
for (int i = 0; i < n; i++) {
    min[i] = p[i][0];
    for (int j = 0; j < m; j++) {
        if (p[i][j] < min[i])
            min[i] = p[i][j];
    }
}
 
for (int i = 0; i < n; i++)
    cout << " " << min[i];
cout << endl;
 
int max = min[0];
for (int i = 0; i < n; i++)
    if (min[i] > max)
        max = min[i];
 
cout << " max : " << max << endl;
 
for (int i = 0; i < n; i++)
    delete[] p[i];
delete[] p;
Но моя проблема заключается именно в изменении индексации, программа задачу выполняет, но следом выдает ошибку "Dinam_MASSIVE.exe вызвал срабатывание точки останова." находится она в строке вывода массива на экран, при этом в консоли выводятся все элементы массива
0
 Аватар для JohnBlack123
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
03.03.2019, 11:54
Debug_, я проверял Ваш код, мой отладчик падал на моменте освобождения памяти. Вполне возможно, что именно Ваша "индексация" и нарубила дров.
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
03.03.2019, 11:55
Цитата Сообщение от Debug_ Посмотреть сообщение
Но моя проблема заключается именно в изменении индексации
У тебя порнография с указателями.
1
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,240
03.03.2019, 11:56
Цитата Сообщение от Debug_ Посмотреть сообщение
C++
1
2
3
4
for(int i = 0; i < n; i++)
{
* * p[i] -= index;
}
- вот это зачем делать? Вам выделили память. Вы от адресов отнимаете по 1. Это зачем? Это ошибка, на мой взгляд. Правильно?
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
03.03.2019, 11:58
Лучший ответ Сообщение было отмечено Debug_ как решение

Решение

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
int main()
{
    srand(time(0));
    setlocale(LC_ALL, "Russian");
    int n, m, elem;
    const int index = 1;
    cout << "Введите количество строк массива: ";
    cin >> n;
    cout << "Введите количество столбцов массива: ";
    cin >> m;
    /*int **p = new int *[n];*/
    int **p = (int**)malloc(n * sizeof(int));
   /* for (int i = 0; i < n; i++)
    {
        p[i] -= index;
    }
    p -= index;*/
    for (int i = 0/*index*/; i < n/* + index*/; i++)
    {
        p[i] = (int*)malloc(m * sizeof(int));
        for (int j = 0/*index*/; j < m/*+index*/; j++)
        {
            elem = rand() % 10;
            p[i][j] = elem;
            cout << p[i][j] << " ";
        }
        cout << endl;
    }
    int min, max = -1, k;
    for (int i = 0/*index*/; i < n /*+ index*/; i++)
    {
        for (int j =0/* index*/; j < m/* + index*/; j++)
        {
            min = p[i][j];
            if (p[i][j] < min)
            {
                min = p[i][j];
            }
        }
        if (min > max)
        {
            max = min;
            k = i;
        }
        cout << "Минимальный элемент в " << i << "-ой строке: " << min << endl;
    }
    cout << "Максимальный среди минимальных находится в " << k << "-ой строке: " << max << endl;
 /*
    for (int i = 0; i < n; i++)
    {
        p[i] += index;
    }
    p += index;*/
    for (int i = 0; i </*=*/ n; i++)
    {
        free(p[i]);
        p[i] = NULL;
    }
    free(p);
    p = NULL;
    /*for (int i = 0; i < n; i++)
    {
    p[i]-=index;
    delete[](p[i]);
    }
    p-=index;
    delete[](p);*/
    system("pause");
    return 0;
}
1
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,240
03.03.2019, 11:58
Да и что от new создание двухмерного динамического массива не заработало? Всю жизнь нормально работало, а тут раз - и не заработало.
0
0 / 0 / 0
Регистрация: 03.03.2019
Сообщений: 7
03.03.2019, 12:04  [ТС]
Требование преподавателя

Добавлено через 2 минуты
нужно решить задачу двумя способами, что я и делаю. Да, проблема с индексацией, появилась она после того, как преподаватель сказал вернуть индексацию к исходной (0;0) перед очисткой памяти
Вот эта часть кода
C++
1
2
3
4
5
for (int i = 0; i < n; i++)
    {
        p[i] += index;
    }
    p += index;
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
03.03.2019, 12:44
Ну и извращение, честное слово.

вот со сменой индексации и правильным поиском:

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
78
79
int main()
{
    srand(time(0));
    setlocale(LC_ALL, "Russian");
    int n, m, elem;
    const int index = 1;
    cout << "Введите количество строк массива: ";
    cin >> n;
    cout << "Введите количество столбцов массива: ";
    cin >> m;
    /*int **p = new int *[n];*/
    int **p = (int**)malloc(n * sizeof(int));
    /*
    for (int i = 0; i < n; i++)
    {
        p[i] -= index;
    }*/
    p -= index;
    for (int i = index; i < n + index; i++)
    {
        p[i] = (int*)malloc(m * sizeof(int));
 
        p[i] -= index; ///
    
 
        for (int j = index; j < m+index; j++)
        {
            elem = rand() % 10;
            p[i][j] = elem;
            cout << p[i][j] << " ";
        }
        cout << endl;
    }
    int min, max = -1, k;
    for (int i = index; i < n + index; i++)
    {
        min = p[i][1]; //
        for (int j = index; j < m + index; j++)
        {
          //  min = p[i][j];
            if (p[i][j] < min)
            {
                min = p[i][j];
            }
        }
        if (min > max)
        {
            max = min;
            k = i;
        }
        cout << "Минимальный элемент в " << i << "-ой строке: " << min << endl;
    }
    cout << "Максимальный среди минимальных находится в " << k << "-ой строке: " << max << endl;
 
 
    p += index; ///
    for (int i = 0; i < n; i++)
    {
        p[i] += index;
    }
    
 
    for (int i = 0; i </*=*/ n; i++)
    {
        free(p[i]);
        p[i] = NULL;
    }
    free(p);
    p = NULL;
    /*for (int i = 0; i < n; i++)
    {
    p[i]-=index;
    delete[](p[i]);
    }
    p-=index;
    delete[](p);*/
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 03.03.2019
Сообщений: 7
03.03.2019, 13:44  [ТС]
Цитата Сообщение от Folian Посмотреть сообщение
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
int main()
{
    srand(time(0));
    setlocale(LC_ALL, "Russian");
    int n, m, elem;
    const int index = 1;
    cout << "Введите количество строк массива: ";
    cin >> n;
    cout << "Введите количество столбцов массива: ";
    cin >> m;
    /*int **p = new int *[n];*/
    int **p = (int**)malloc(n * sizeof(int));
   /* for (int i = 0; i < n; i++)
    {
        p[i] -= index;
    }
    p -= index;*/
    for (int i = 0/*index*/; i < n/* + index*/; i++)
    {
        p[i] = (int*)malloc(m * sizeof(int));
        for (int j = 0/*index*/; j < m/*+index*/; j++)
        {
            elem = rand() % 10;
            p[i][j] = elem;
            cout << p[i][j] << " ";
        }
        cout << endl;
    }
    int min, max = -1, k;
    for (int i = 0/*index*/; i < n /*+ index*/; i++)
    {
        for (int j =0/* index*/; j < m/* + index*/; j++)
        {
            min = p[i][j];
            if (p[i][j] < min)
            {
                min = p[i][j];
            }
        }
        if (min > max)
        {
            max = min;
            k = i;
        }
        cout << "Минимальный элемент в " << i << "-ой строке: " << min << endl;
    }
    cout << "Максимальный среди минимальных находится в " << k << "-ой строке: " << max << endl;
 /*
    for (int i = 0; i < n; i++)
    {
        p[i] += index;
    }
    p += index;*/
    for (int i = 0; i </*=*/ n; i++)
    {
        free(p[i]);
        p[i] = NULL;
    }
    free(p);
    p = NULL;
    /*for (int i = 0; i < n; i++)
    {
    p[i]-=index;
    delete[](p[i]);
    }
    p-=index;
    delete[](p);*/
    system("pause");
    return 0;
}
Спасибо большое
все работает и уже понятно, что не так в моем коде
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2019, 13:44
Помогаю со студенческими работами здесь

Динамический двумерный массив строк и операции со строками (поиск, обрезка, слияние)
Создать динамический двумерный массив на 10 ячеек (для десяти строк). Заполнить его строчками текста, принятыми с клавиатуры. ...

Динамический двумерный массив
Если число находится в интервале от 100 до 110, то используя подпрограмму, в матрицах Р(N,M), Q(N1,M1) и R(N2,M2) найти и отпечатать L -...

Двумерный динамический массив
Необходимо ввести с клавиатуры количество строк и столбцов массива(матрица размером N*M), ввести исходные данные. Удалить столбец матрицы,...

Вывести четные элементы матрицы
Здравствуйте, задание такое: &quot;Описать двумерный массив R целых чисел, размерностью NхM элементов, заполнять массив случайными числами по...

Динамический двумерный массив
Здравствуйте, начал недавно учить с++, смотрю видеоуроки. Дошел до этой темы и столкнулся с проблемой... программа не хочет принимать ввод,...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru