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

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

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

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

Кликните здесь для просмотра всего текста
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
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,521
Записей в блоге: 1
08.08.2022, 19:04 2
ну собственно твои a[i+-1][j+-1] выходят за пределы массива.
не прибавляй/отнимай единицу когда элемент с краю массива.
1
 Аватар для Folian
1710 / 1110 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
08.08.2022, 19:06 3
Цитата Сообщение от 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
 Аватар для SmallEvil
3770 / 2698 / 763
Регистрация: 29.06.2020
Сообщений: 9,936
09.08.2022, 00:55 4
Цитата Сообщение от Alllgator343 Посмотреть сообщение
программа лезет не в свой сегмент памяти
Что бы такого не было, сделайте проверку на выход за границы массива.
А еще можно скомпоновать сдвиги, что б можно было проходится по ним циклом.

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

Добавлено через 56 секунд
Не понимаю, объясните, пожалуйста.
0
 Аватар для SmallEvil
3770 / 2698 / 763
Регистрация: 29.06.2020
Сообщений: 9,936
09.08.2022, 11:46 7
Цитата Сообщение от 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
12847 / 6714 / 1805
Регистрация: 18.10.2014
Сообщений: 17,014
09.08.2022, 21:51 8
Цитата Сообщение от Alllgator343 Посмотреть сообщение
Соседями элемента Аij в матрице называются элементы Аkl где формула.
Что значит "где формула"?
0
4 / 1 / 0
Регистрация: 20.06.2020
Сообщений: 82
09.08.2022, 21:59  [ТС] 9
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
12847 / 6714 / 1805
Регистрация: 18.10.2014
Сообщений: 17,014
09.08.2022, 22:08 10
Цитата Сообщение от Alllgator343 Посмотреть сообщение
Брал вот из этой темы
Что именно "брал"? Там несколько вариантов.

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

Кликните здесь для просмотра всего текста
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
12847 / 6714 / 1805
Регистрация: 18.10.2014
Сообщений: 17,014
09.08.2022, 22:22 12
Вместо того, чтобы разбираться с этими "непонятными" условиями, заведите массив на две строки и два столбца больше, чем требуется, т.е. [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
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Создаем утилиты CLI с помощью Node.js
run.dev 07.03.2025
Помню те времена, когда командная строка считалась уделом гиков и сисадминов. Они давно прошли. Но история повторяется и интерфейс командной строки (CLI) снова ягодка опять в средах разработки и стал. . .
Тестирование в JavaScript: как использовать Jest и Cypress
run.dev 07.03.2025
Когда DOM-дерево рассыпается от одной неверной строчки кода, а асинхронные операции превращают отлаженный компонент в источник головной боли, тесты помогут спасти ситуацию. Два инструмента особенно. . .
Управление версиями Python с помощью pyenv
py-thonny 07.03.2025
Знакома ли вам ситуация, когда вы начинаете новый проект, а он требует Python 3. 8, в то время как на вашей системе установлен Python 3. 10? Или когда вы пытаетесь запустить старый скрипт, а он выдаёт. . .
Обработка двоичных данных в Python
py-thonny 07.03.2025
При работе с данными мы можем встретиться с двумя совершенно разными типами: текстовыми и двоичными. Хотя с текстом мы взаимодействуем постоянно, именно бинарные данные лежат в основе всех цифровых. . .
Сайт компании Red-Star-Soft переехал на новый хостинг!
Etyuhibosecyu 06.03.2025
Как и советовал Rius, я покинул хостинг от "Ru-Center" и перенес сайт red-star-soft. com на хостинг с более позитивными отзывами (спойлер: найти его было далеко не просто) (чтобы прочитать текст,. . .
Альтернативная сериализация в Java: сравнение Kryo, Protobuf и Avro
Jamaican 06.03.2025
Сериализация — один из краеугольных процессов в Java-разработке. Превращение объектов в поток байтов для хранения или передачи по сети с последующим восстановлением звучит просто, но реализация этого. . .
Битва Java-кешей: Сравниваем Ehcache, Caffeine и Hazelcast
Jamaican 06.03.2025
Производительность — вечный Святой Грааль для Java-разработчиков. Мы оптимизируем алгоритмы, настраиваем JVM, распараллеливаем процессы, но неизменно приходим к одному и тому же средству ускорения —. . .
Параметры подтверждения сообщения Kafka
Jamaican 06.03.2025
Среди распределённых систем и высоконагруженных приложений Apache Kafka занимает особое место. Эта платформа потоковой обработки данных давно стала стандартом де-факто для организаций, которым. . .
Оптимизация времени запуска Spring Boot
Jamaican 06.03.2025
Вы когда-нибудь сидели, барабаня пальцами по столу, пока ваше Spring Boot приложение медленно поднимается? Этот момент, когда вы успеваете сходить за кофе, пообщаться с коллегами и вернуться, а. . .
Деплой Kubernetes в Java: масштабирование Spring Boot приложений
Jamaican 06.03.2025
Когда ваше Spring Boot приложение внезапно получает всплеск трафика или требует плавного обновления без простоя — традиционные методы деплоя часто пасуют. Именно здесь на сцену выходит Kubernetes —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер