Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
4 / 1 / 0
Регистрация: 20.06.2020
Сообщений: 82

Ошибка сегментирования (стек памяти сброшен на диск)

08.08.2022, 18:58. Показов 5279. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Прошу помощи. При компиляции ошибок нет, двумерный массив появляется, но при выполнении блока с подсчетом локальных минимумов выдает ошибку: "Ошибка сегментирования (стек памяти сброшен на диск". Я так понимаю, что программа лезет не в свой сегмент памяти. В чем ошибка не пойму.

Кликните здесь для просмотра всего текста
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
int main()
{/*Ввод данных*/
int nstr, nstb,i,j,k;
cout << "Введите количество строк и столбцов: ";
cin >> nstr >> nstb;
// Выделяем память под массив указателей на строки массива
int **a = new int *[nstr];
// Выделяем память под каждую строку
for (int i=0; i<nstr; i++)
// Каждому элементу массива указателей на строки присваивается адрес строки
a[i] = new int [nstb];
cout<<"Введите элементы матрицы"<<endl;
for (i = 0; i<nstr; i++)
 {for (j = 0; j<nstb; j++)
 cin >> a[i][j];}
// Вывод
for (i=0;i<nstr; i++)
 {for (j=0;j<nstb; j++)
  cout << setw(3)<<a[i][j];
 cout << endl;}
 
//Подсчитать количество локальных минимумов
 
 
int k = 0;
 for (i = 0; i < nstr; i++)
 {
  for (j = 0; j < nstb; j++)
   {
    if ((a[i][j] < a[i-1][j]) &&
        (a[i][j] < a[i+1][j]) &&
        (a[i][j] < a[i][j-1]) &&
        (a[i][j] < a[i][j+1]))
        k++;
   }
 }
   
 
return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.08.2022, 18:58
Ответы с готовыми решениями:

ошибка сегментирования стек памяти сброшен на диск, знаю что си и с++ немного отличаются, ну вдруг кто-то подскажет
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; #include &lt;malloc.h&gt; int main() { int **a; int n, m, i, j, max, tmp,...

Аварийный останов (стек памяти сброшен на диск)
Этот участок кода вызывает ошибку. Как исправить? *** stack smashing detected ***: &lt;unknown&gt; terminated Аварийный останов (стек...

Ошибка сегментирования (стек памяти сброшен на диск)
Помогите найти ошибку в коде. Ошибка сегментирования выскакивает после ввода трех строк. section .data hello_msg db &quot;Welcome to...

11
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
08.08.2022, 19:04
ну собственно твои a[i+-1][j+-1] выходят за пределы массива.
не прибавляй/отнимай единицу когда элемент с краю массива.
1
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
08.08.2022, 19:06
Цитата Сообщение от Alllgator343 Посмотреть сообщение
В чем ошибка не пойму
Цитата Сообщение от Alllgator343 Посмотреть сообщение
программа лезет не в свой сегмент памяти
Цитата Сообщение от Alllgator343 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
for (i = 0; i < nstr; i++)
 {
  for (j = 0; j < nstb; j++)
   {
    if ((a[i][j] < a[i-1][j]) &&  /* i-1 == -1 */
        (a[i][j] < a[i+1][j]) && /* i+1 == nstb*/
        (a[i][j] < a[i][j-1]) && /* j-1 == -1 */
        (a[i][j] < a[i][j+1])) /*j+1 == nstb*/
...
1
Заблокирован
09.08.2022, 00:55
Цитата Сообщение от Alllgator343 Посмотреть сообщение
программа лезет не в свой сегмент памяти
Что бы такого не было, сделайте проверку на выход за границы массива.
А еще можно скомпоновать сдвиги, что б можно было проходится по ним циклом.

Вот примерчик :
Поле клеток
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
09.08.2022, 02:22
Цитата Сообщение от Alllgator343 Посмотреть сообщение
Подсчитать количество локальных минимумов
Как определяется "локальных минимум" для элемента, находящегося на краю массива? Может ли элемент на краю массива быть локальным минимумом?
0
4 / 1 / 0
Регистрация: 20.06.2020
Сообщений: 82
09.08.2022, 11:04  [ТС]
Соседями элемента Аij в матрице называются элементы Аkl где формула. Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов.

Добавлено через 56 секунд
Не понимаю, объясните, пожалуйста.
0
Заблокирован
09.08.2022, 11:46
Цитата Сообщение от Alllgator343 Посмотреть сообщение
Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей.
Кто такие эти соседи, какие у них признаки ?
Ладно, будем считать что прилегающие по вертикали и горизонтали.

Цитата Сообщение от Alllgator343 Посмотреть сообщение
Не понимаю, объясните, пожалуйста.
Я же ссылку на кота давал, там минимум правок нужно.

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
#include <iostream>
 using namespace std;
 
int main(){
    const int SHIFTSC = 4;
    const int shifts[SHIFTSC][2]{{0,1},{0,-1},{1,0},{-1,0},};
    const int ROWS = 2, COLS = 3;
    int arr[ROWS][COLS] {
        {1, 5, 9,},
        {2, 6, 5,},
    };
    int r, c;
    cout << "The matrix : " << endl;
    for (int i=0; i<ROWS; ++i){
        for (int j=0; j<COLS; ++j)
            cout << arr[i][j] << " ";
        cout << "" << endl;
    }
    int local_min_coont = 0;
    for (int i=0; i<ROWS; ++i){
        for (int j=0; j<COLS; ++j){
            bool is_min = true;
            for (int sh=0; sh<SHIFTSC; ++sh){
                r = i + shifts[sh][0];
                c = j + shifts[sh][1];
                if ( (r>=0 && r<ROWS) && (c>=0 && c<COLS) )
                    is_min = is_min && ( arr[i][j] < arr[r][c] );
            }
            if (is_min)
                ++local_min_coont;
        }
    }
    cout << "Local mins - " << local_min_coont;
     return 0;
}
Добавлено через 16 минут
edit
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
09.08.2022, 21:51
Цитата Сообщение от Alllgator343 Посмотреть сообщение
Соседями элемента Аij в матрице называются элементы Аkl где формула.
Что значит "где формула"?
0
4 / 1 / 0
Регистрация: 20.06.2020
Сообщений: 82
09.08.2022, 21:59  [ТС]
TheCalligrapher я не знаю, так в задании указано. Видимо так копировал преподаватель.

Все до чего я додумался это

C++
1
2
 if ((a[i+1][j] > a[i][j] < a[i-1][j]) &&
         (a[i][j+1] > a[i][j] < a[i][j-1])
Брал вот из этой темы
Кликните здесь для просмотра всего текста
, у них вроде как все работает, у меня не хочет.
SmallEvil подсказал, но код мне не понятен, что куда.
То, что написал Folian я вообще не понял, куда это вставлять.

Даже с подсказками целый день убил, все еще сижу, так и не понимаю, как исправить программу.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
09.08.2022, 22:08
Цитата Сообщение от Alllgator343 Посмотреть сообщение
Брал вот из этой темы
Что именно "брал"? Там несколько вариантов.

Цитата Сообщение от Alllgator343 Посмотреть сообщение
у них вроде как все работает
Вариант вроде вашего? Нет, там он не работает. Зачем вы его оттуда взяли, если даже там указали на эту же ошибку и даже там код в итоге исправили?
0
4 / 1 / 0
Регистрация: 20.06.2020
Сообщений: 82
09.08.2022, 22:18  [ТС]
Объясните мне, пожалуйста, как этот код работает:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 k = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            flag = true;
            if (i > 0 && a[i-1][j] <= a[i][j])
                flag = false;
            if (j > 0 && a[i][j-1] <= a[i][j])
                flag = false;
            if (i < n - 1 && a[i+1][j] <= a[i][j])
                flag = false;
            if (j < n - 1 && a[i][j+1] <= a[i][j])
                flag = false;
            if (flag)
                k++;


Зачем нужны flags, false, true? С данным кодом заработало, но он мне непонятен.

Добавлено через 5 минут
TheCalligrapher я этот код взял, т.к. думал, что он работает. Автор того кода написал: "но по-моему все работает. Я тестировал программу на разных матрицах. " Код ниже, тот что исправлен, работает, но он мне непонятен. Мне еще преподавателю объяснять как это все работает.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
09.08.2022, 22:22
Вместо того, чтобы разбираться с этими "непонятными" условиями, заведите массив на две строки и два столбца больше, чем требуется, т.е. [nstr+2][nstb+2]. Крайние элементы матрицы по кругу аккуратно заполните значениями INT_MAX.

А все остальное делайте как и раньше в центральной части матрицы

C++
1
2
for (i = 1; i <= nstr; i++)
  for (j = 1; j <= nstb; j++)
Тогда никаких дополнительных проверок будет не нужно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2022, 22:22
Помогаю со студенческими работами здесь

Ошибка сегментирования (стек памяти сброшен на диск)
Есть следующий код (с ncurses): #include&lt;ncurses.h&gt; #include&lt;string.h&gt; unsigned short maxx; unsigned short maxy; char *window; ...

Ошибка сегментирования (стек памяти сброшен на диск)
Доброго времени суток, коллеги. Использую SOAP Client https://github.com/phpro/soap-client И при добавлении определенного параметра с...

Ошибка сегментирования (стек памяти сброшен на диск)
section .text global -start _start: mov al, 25 mov bl, 37 div bl mov bx, 3 mul bx

Ошибка сегментирования (стек памяти сброшен на диск)
Здравствуйте. Я новичок в Ассемблере, и мне надо решить следующую задачу: есть массив из 12 положительных чисел. Нужно посчитать количество...

Ошибка сегментирования стек памяти сброшен на диск
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; #include &lt;malloc.h&gt; int main() { int **a; int n, m, i, j, max, tmp,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru