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

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

Войти
Регистрация
Восстановить пароль
 
Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132
#1

"Недостаточно памяти для запуска программы" - C++

17.12.2013, 10:35. Просмотров 694. Ответов 9
Метки нет (Все метки)

Задача - отсортировать случайный массив n=500 методом выбора.
Почему то неверно выводит на экран значения M и С, хотя под отладчиком все нормально считает, в чем может быть ошибка? М считает до n<300, а С вообще пишет ноль, хотя под отладчиком все красиво.
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
#include  <stdio.h>
#include  <conio.h>
#include <time.h>
#include  <stdlib.h>
#include <alloc.h>
#define ESC 27
 
int swap (int *y, int i, int j) //®Ў¬Ґ* н«Ґ¬Ґ*в®ў ¬*ббЁў*
 {
  int t; int M;
  t=y[i];
  y[i]=y[j];
  y[j]=t;
  M=1;
  return M;
 }
sum (int *y, int z)//Ї®¤бзҐв Є®*ва®«м*®© б㬬л
 {
  int i, sum=0;
  for (i=0;i<z;++i)
    sum+=y[i];
  return sum;
 }
void select (int *x,int k,int s) //б®авЁа®ўЄ* ўлЎ®а®¬
 {
  int S,min,t,i,j,num; long int C=0, M=0;
  for (j=0;j<k-1;++j)
  {
   num=j,
   min=x[j];
   for (i=j+1;i<k;++i) //*®¬Ґа ⥪г饣® и*Ј*
   {
    if (x[i]<min)  //Ї®ЁбЄ ¬Ё*Ё¬г¬* б।Ё ®бв*ўиЁебп н«Ґ¬Ґ*в®ў ¬*ббЁў*
     {
      min=x[i];
      num=i;
     }
     C++;
    }
   M+=swap (x,j,num);
   }
  for (i=0,S=1;i<k;++i)
   {
   if (x[i]>x[i+1])
     S++;
   }
  if (S>1)
   printf("\n Error \n");
  if (s!=sum(x,k))
   printf("\n ЋиЁЎЄ* б®авЁа®ўЄЁ, Ї®«гзҐ** *ҐўҐа**п Є®*ва®«м**п б㬬* \n");
  else
    printf("\n M=%d, C=%d,  \n",M,C);
 
 }
 
 
void main ()
 {
int i,n, sum, *a; char key;
  do
  {
   sum=0;
   randomize();
   clrscr ();
   fflush(stdin);
   printf("\n ‚ўҐ¤ЁвҐ §**зҐ*ЁҐ n - Є®«ЁзҐбвў® н«Ґ¬Ґ*в®ў ¬*ббЁў*   ");
   scanf("%d",&n);
   a=(int*)malloc(n*sizeof (int));
   
   for (i=0; i<n; i++)
    {
     a[i]=random(100);
     sum+=a[i]; //Ї®¤бзҐв Є®*ва®«м*®© б㬬л
    }
   select(a,n,sum);
   free(a);
   puts ("‚ўҐбвЁ ¤агЈ®Ґ Є®«ЁзҐбвў® н«Ґ¬Ґ*в®ў ¬*ббЁў*? (ЌҐв=Esc)");
   key=getch();
  }
  while (key!=ESC);
 }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2013, 10:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос "Недостаточно памяти для запуска программы" (C++):

После запуска exe-файла выдаёт "Прекращена работа программы" - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main(){ cout &lt;&lt; &quot;Vvedite razmernost massiva \n&quot;; ...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Как сделать так, чтобы введенное с клавиатуры слово "helllo" в памяти сохранялось в виде "Hello". - C++
Здравствуйте. Подскажите пожалауйста как сделать чтоб согда я вводу с клавиатуры helllo, в памяти оставалось &quot;Hello&quot;. Данные типа...

Наследуемым классом для комплексного числа объявить класс "радиус-вектор", имеющий данные "длина" и "угол" - C++
кто то напишите пожалуйста, вот программа: наследуемым классом для комплексного числа объявить класс &quot;радиус-вектор&quot;, имеющий данные...

Через ООП: Дать для числа наименование: "рубль", "рубля", "рублей"; - C++
Помогите пожалуйста с задачей. Могу сделать ее просто, но надо через ООП и у меня не получается. Дано натуральное число N (N&lt;20),...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

9
zss
Модератор
Эксперт С++
6679 / 6241 / 2080
Регистрация: 18.12.2011
Сообщений: 16,301
Завершенные тесты: 1
17.12.2013, 11:03 #2
строка 42
C++
1
for (i=0,S=1;i<k-1;++i)
т.к. внутри идет обращение к x[i+1].
0
Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132
17.12.2013, 11:16  [ТС] #3
Спасибо,точно, а я думаю, что он через раз пишет ошибку, а в другой раз не пишет. А почему программа неверно выводит значение С и М? Смотрю под отладчиком, все подсчитано, а на экране 0, как такое вообще может быть?

Добавлено через 2 минуты
Например, при n=500, значение М - количество перемещений 499, значение С - количество сравнений 124750 - это правильно и программа правильно подсчитала, а на экране С=0, ну как так?

Добавлено через 4 минуты
программа уже не пишет, что не хватает памяти, не хватало, когда я сделала тип данных массива а long, но потом поняла, что массиву и так достаточно
0
zss
Модератор
Эксперт С++
6679 / 6241 / 2080
Регистрация: 18.12.2011
Сообщений: 16,301
Завершенные тесты: 1
17.12.2013, 11:19 #4
У меня в VS 2008 и debug и release выдает одинаковые ответы.
Может запускаете файл от старой компиляции?
0
Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132
17.12.2013, 11:45  [ТС] #5
Это как? я перед запуском откомпилировала все заново и запускала через Borland C
0
zss
Модератор
Эксперт С++
6679 / 6241 / 2080
Регистрация: 18.12.2011
Сообщений: 16,301
Завершенные тесты: 1
17.12.2013, 12:54 #6
Если есть ошибка компиляции, то запускается старый вариант.
0
Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132
17.12.2013, 13:06  [ТС] #7
Но ошибки компиляции нет, по крайней мере не выводит ошибку
0
Kuzia domovenok
2119 / 1949 / 192
Регистрация: 25.03.2012
Сообщений: 6,755
Записей в блоге: 1
17.12.2013, 13:33 #8
zss, что, и в борланде тоже запускается старый вариант? При чём тут студия?
0
zss
Модератор
Эксперт С++
6679 / 6241 / 2080
Регистрация: 18.12.2011
Сообщений: 16,301
Завершенные тесты: 1
17.12.2013, 15:20 #9
У меня нет Борланда.
0
Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132
18.12.2013, 11:23  [ТС] #10
, что же делать то?

Добавлено через 13 часов 54 минуты
А делать вот что - изменить тип данных на unsingnet long и выводить командой printf() по отдельности М и С. Видно функции printf() не хватает, чтобы запомнить обе переменные, слишком уж они большие.... другого варианта не вижу...

Добавлено через 31 минуту
И еще, надо при выводе ставить в команде printf () перед спецификатором d или u, букву l - чтобы функция поняла, что данные типа long... вот теперь все.
0
18.12.2013, 11:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2013, 11:23
Привет! Вот еще темы с ответами:

Выделение памяти для "треугольного" массива - C++
Сразу извиняюсь за &quot;неграмотность&quot; в коде. #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; using namespace std; int...

Что лучше для хранения БД в динамической памяти "Связный список" или же просто в массиве? - C++
Всем доброго времени суток! Получил тему курсовой, попалась тема база данных на файле. Не долго думая как хранить все данные в...

2 Программы. На "целые числа и системы счисления" и на "метод деления отрезка пополам" - C++
1)Дано натурально число n. Среди чисел 1, ... ,n найти все такие, запись которых совпадает с последними цифрами их квадрата ( как,...

Перегрузка оператора "++" и "--" , компилирует, но при запуске программы - ошибка - C++
#include &lt;iostream&gt; #include&lt;ctime&gt; #include&lt;stdio.h&gt; #include&lt;locale.h&gt; #include &lt;windows.h&gt; #include &lt;conio.h&gt; ...


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

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

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