Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Skywalkera
0 / 0 / 0
Регистрация: 17.11.2016
Сообщений: 2
#1

Ошибка памяти - C++

16.02.2017, 18:02. Просмотров 116. Ответов 1
Метки нет (Все метки)

Доброго дня. Случилась у меня тут значит загвоздка с ошибкой памяти, препод смотреть и разбираться не стал, сказал, мол, сам виноват ошибка в коде и усе. А меня эта ошибка уже недели 2 мучает, самому интересно из-за чего так происходит.

Значит так. Задачка была такая: объявляется массив размерностью от 2-х до 20 (размерность объявляет пользователь), в него пользователь вводит значения 0 и 1. По итогу програмка должна вывести является ли введенная последовательность переодической, а также период (если он есть).

Так вот. На всех значениях размерности программа работает нормально, кроме 6, 10 и 14. К примеру, на скрине размерность массива вводил 6, значения 1111111. Выводится результат, после чего ошибка.

Что самое интересное, так это то, что на mac все работает замечательно при любых значениях, а на ноуте с арчем вылазит ошибка. На винде не проверял, так как у меня ее попросту нет. В обоих случаях, что на mac, что на arch компилировал при помощи g++.

Код:
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
//lb3.cpp
//Определяет, является ли последовательность 0 и 1 в массиве переодической
#include <stdio.h>
#include <cstdlib>
 
int main (int argc, char *argv[])
{
system ("clear");
int M = 0; // количество элементов в массиве от 2 до 20
 
//Ввод количества элементов массива
do
{
  printf ("Введите количество элементов от 2 до 20\n");
  scanf ("%d",&M);
  if (M<2 || M>20)
    printf ("Неверный ввод. Попробуйте Заново.\n");
  else
    system ("clear");
} while (M<2 || M>20);
 
//Объявляем массив
int* numbers = new int [M];
 
//Ввод элементов массива
for (int i=0; i<=M; i++)
{
  do
  {
    printf ("Введите %d-й элемент массива: 0 или 1\n", i);
    scanf ("%d",&numbers[i]);
    if (numbers[i] < 0 || numbers[i] > 1)
      printf ("Можно вводить только 0 или 1. Повторите попытку\n");
    else
      system ("clear");
  } while (numbers[i] < 0 || numbers[i] > 1);
}
 
// Решение
 
int T=1; //Период
bool periodic; //Переодичность
 
//Вычисление максимально возможного периода
int maxPeriod = ((M+1)/2);
 
//Tecт массива на переодичность и вычисление периода
do
{
  periodic = true;
  if (numbers[0] == numbers[0+T])
  {
    for (int i=0; i <= T; i++)
    {
      for (int j=1; i+j*T<=M; j++)
        if (numbers [i] != numbers [i+j*T])
        {
          periodic = false;
          T=T+1;
        }
    }
  }
  else
  {
    periodic = false;
    T=T+1;
  }
} while ((T<=maxPeriod) && (periodic == false));
 
//Вывод соощения о введенной последвательности
if (periodic == true)
  printf (" Введеная вами последовательность является периодической.\n T=%d\n ", T);
  else
  printf ("Введеная вами последоваельность не является переодической\n");
 
delete [] numbers;
 
return 0;
}
Скрины работы на arch и mac:
Кликните здесь для просмотра всего текста

Ошибка памяти
Ошибка памяти
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2017, 18:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка памяти (C++):

Ошибка памяти - C++
Всем пользователям - приветствие! :good: Мне нужна Ваша помощь... Делаю свою первую курсовую работу... И, я решил перевести...

C++ Ошибка памяти - C++
я пишу скриптовый язык программирования на с++ сейчас занят тем что пытаюсь сделать так чтоб программа считывала строку и конвертировала...

Ошибка выделения памяти - C++
Извиняюсь за то, что не умею гуглить. =) vector&lt;double&gt; v; v.resize(1000500); v.reserve(1000500); resize - просто говорит о...

Ошибка выделения памяти... - C++
Когда я пытаюсь выделить память двумерному динамическому массиву, возникает ошибка &quot;Microsoft C++ exception: std::bad_alloc at memory...

Ошибка в выделении памяти - C++
проблема с выделением памяти. ошибку никак найти не могу, поможет кто исправить? #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using...

Очистка памяти - ошибка - C++
Здравствуйте, друзья. Подскажите, пожалуйста, где ошибка: #include &lt;stdio.h&gt; int main() { int size = 5; int **array = new...

1
nd2
2396 / 1985 / 697
Регистрация: 29.01.2016
Сообщений: 6,452
16.02.2017, 18:09 #2
Цитата Сообщение от Skywalkera Посмотреть сообщение
C++
1
2
3
4
5
/Объявляем массив
int* numbers = new int [M];
 
//Ввод элементов массива
for (int i=0; i<=M; i++)
Тут выход за пределы выделенной памяти, нужно просто < . Последний допустимый индекс M - 1, у тебя будет M. Это UB, а значит работать может как угодно (это к тому, что там-то работает, там-то нет). Дальше код не смотрел.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2017, 18:09
Привет! Вот еще темы с ответами:

Выделение памяти. Ошибка - C++
Доброе утро! Есть программа, которая хранит сведения о студентах. В ней реализовано 2 класса. 1 - класс группа 2 - студент. Всё работает:...

Ошибка выделения памяти - C++
char * host; host = (char*)malloc(wcslen(_host)); // выделяю память memset(host,'\0',wcslen(_host)); // очищаю host = '\0 ';...

ошибка с выделением памяти - C++
выдает ошибку в выделении памяти. никто не подскажет почему? если что -задача звучит так примерно вводим веественные числа пока не...

Ошибка выделения памяти(?) - C++
Первый перечень(Который perech) записывается нормально,а вот второй(makeperech) крашит(объявления вроде те же,что и в первом перечне,не...


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

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

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