Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
canek244
0 / 0 / 1
Регистрация: 23.09.2012
Сообщений: 3
0

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd"

26.09.2012, 05:45. Просмотров 1674. Ответов 2
Метки (Все метки)

вот код, нужно найти 3 минимальных положительных числа в массиве.
При размере массива больше 950 в конце заполнения рандомным способом вылитает ошибка,
При размере массива больше 15-20 во время окончания отладки, выдаёт ошибку.

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd"

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include "stdafx.h"
 
#include <clocale>
#include <conio.h>
#include <stdio.h>
#include <ctime>
#include <iostream>
 
int random(int, int);   //прототип функции
 
int security();
 
 
int main()
{  setlocale(LC_ALL, "Russian");
   setlocale(LC_ALL, "rus");
   int menu, i, size=0, g, iM, menu1, menu2,temp;
   int max1, max2, max3;           
   int *mas=new  int[size](); 
   int wasEntered=0;  
   int wasNext=0;
   printf("*Программа для нахождение трёх самых маленьких положительных чисел в массиве*\n\n");
 
do
{  printf("1. Ввод элементов массива\n");
   printf("2. Обработка массива\n");
   printf("3. Вывод данных на экран\n");
   printf("-------------------------\n");
   printf("0. Выход.\n");
   printf("Ваш выбор: ");
   menu=security();
 switch(menu)
 {   case 1:
mak:
         iM =0,size=0;         
         printf("\n\n\nВведите размер массива: ");
         iM=security();
 
          if (iM<=0)
          {   printf("\n\aОшибка!\n Размер не может быть отрицательным или равным 0!\n");
              goto mak;    }
 
          if (iM>=901)
          {   printf("\n\aОшибка!\n Размер слишком большой(901=> )!\n");
              goto mak;    }
  
         printf("1. Ручной ввод\n");
         printf("2. Авто-заполнение(рандомом)\n");
         printf("3. Назад\n");
         printf("Ваш выбор: ");
         menu1=security();
        switch(menu1)
        {    case 1: printf ("\n\nВведите целые элементы массива: \n");
                     for(i=0,g=0; g<iM; g++)
                     {    temp=security();
                     if(temp>0)
                     {    mas[i]=temp;   size++; i++;   } }
                     printf("\nГотово!\n");
                     wasEntered=1;    //массив был заполнен
                     wasNext=0;       //обнуление предыдущего запуска
                       break;
 
             case 2: srand(static_cast<unsigned int>(time(NULL)));   //нужен, что-бы рандом был разный
                     for(i=0; i<iM; i++)
                     mas[i]=random(10, 1000); //Рандом
                     printf("\nГотово!\n\n");
                     wasEntered=1; 
                     wasNext=0; 
                     size=iM;
                       break;
 
             case 3:   break;
 
             default: printf("\a\nНеверный пункт меню!\n");     
                       break;         
        }
      break;
   case 2: if (wasEntered==1)   //условие, что массив был заполнен
           {    
               int temp=0;                          //отсортировка массива по возрастанию    
               for (int i=1;  i<size  ;  i++)
               {   for (int j=0;  j<size-i;  j++)
                   {   if (mas[j]> mas[j+1])
                       {   temp=mas[j];           
                           mas[j]= mas[j+1];    
                           mas[j+1]=temp;
               }    }  }
               max1=mas[0], max2=mas[1], max3=mas[2]; 
               printf("\n\nГотово!\n\n");   
               wasNext=1;   }//обработка была выполнена
 
           else 
           {   printf("\a\nВы ещё не заполнили массив!\n");
               printf("Выберите пункт меню 1.\n\n");      }
     break; 
   case 3: if (wasNext) 
           {    menu2=0;
                printf("\n1. Вывод положительного массива\n");
                printf("2. Вывод трёх самых маленьких положительных чисел в массиве\n");
                printf("3. Назад\n");
                printf("Ваш выбор: ");
                menu2=security(); 
 
               switch(menu2)
               {    case 1: printf("\n");
                             for(i=0; i<size; i++)
                             {   printf("%d; ", mas[i]);   }
                              printf("\nГотово!\n");
                                break;
 
                    case 2: if (size==0)
                            printf("\nПоложительных чисел нету!\n");
                            if (size==1)
                            printf("\nПоложительно число: %d.\n",max1);
                           
                            if (size==2)
                            {   printf("\nПервое число: %d.\n",max1);
                                printf("\nВторое число: %d.\n",max2);
                                printf("Больше положительных чисел нету!\n\n");      }
                            if (size>=3)
                            {   printf("\nПервое число: %d.\n", max1); 
                                printf("\nВторое число: %d.\n", max2);   
                                printf("\nТретье число: %d.\n", max3);    } 
                                 break;
 
                    case 3:  break;
 
                    default: printf("\a\nНеверный пункт меню!\n");       
          }    }
          else 
          {   printf("\a\nВы ещё не произвели расчёт!\n");
              printf("Выберите пункт меню 2.\n\n");       }
     break;
   case 0: 
     break; 
   default: printf("\a\nНеверный пункт меню!\n");
       break;     
}}
while(menu!=0);    
}
 
int random(int min, int max)                  //Функция рандом
{   return (min + rand()%(max-min+1));    }   // от min до max включительно
 
int security()            //Функция защиты ввода
{  char bufStub;
   int y=1;
   double poram;
do
{ 
    poram=0; bufStub=0;
    if((scanf("%lf%c",&poram,&bufStub) != 2) || bufStub != '\n')
    {    printf("\n\aОшибка! Возможно вы ввели нецелое число или символы\n");
           
         while(bufStub != '\n')
         scanf("%c",&bufStub);
    }
    else y=0;
}
while(y==1);
return(poram);
}
Я только начинаю разбираться в c++ после паскаля, подскажите где тут ошибка, и как можно оптимизировать код.

Вернуться к обсуждению:
Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2012, 05:45
Готовые ответы и решения:

Ошибка: "Необработанное исключение: 0xC0000005: Нарушение прав доступа при записи"
мной написана программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Найти в строке последовательность символов ("abcd") и заменить ее другой ("xyz")
Найти в строке последовательность символов (&quot;abcd&quot;) и заменить ее другой...

Ошибка: invalid conversion from "int" to "SDL_RendererFlip"
Скриншот приложен, Вот страница, откуда я брал этот код Подскажите что...

О "нестабильности" или "переполнении" цикла foreach
Здравствуйте, коллеги. Недавно коллега-программист сообщил мне страшную вещь:...

CString buff = "aaa" + "bbb"
Хочется одним оператором конкатенировать несколько подстрок CString buff =...

2
Другие темы раздела
C++ латинизатор кириллицы http://www.cyberforum.ru/cpp/thread658113.html
При интернет общении с русской диаспорой в других странах часто возникают проблемы отсутствия кириллицы у зарубежных респондентов,а так же слабой знание иностранных языков у соотечественников.Один из...
C++ Перестал работать компилятор C++ Доброго времени суток форумчане! Проблема в следующем: Пишу консольный C++ gcc.exe -v 2.95.2 под Windows XP. Целый день работал нормально и неожиданно перестали компилироваться программы, редактор... http://www.cyberforum.ru/cpp/thread657759.html
Литература для работы с памятью процессов C++
Собственно посоветуйте книжек, чтобы научиться работать с памятью процессов. Спасибо.
Посоветуйте пожалуйста компилятор для С/С++, С# C++
Пользовался MS VS, но возникала такая проблема, что на выходе скомпилированную программу можно было запустить только на пк, где установлена MS VS. Я спрашивал на форумах, спрашивал у знакомых, но...
C++ Вывести информацию о изображении http://www.cyberforum.ru/cpp/thread657638.html
Добрый день. Помогите кто-нибудь написать программу, использующую сведения о изображении (*.jpeg) и выводящую информацию об этом изображении вида: размер изображения, глубина цвета, количество...
C++ Microsoft Visual C++ 6.0 fatal error LNK1104: cannot open file "nafxcwd.lib" Проект создавал по http://www.pcports.ru/articles/com_1.php см. вложения. далее пробовал компилировать готовый http://www.pcports.ru/articles/com_5.php тоже самое Менял not Using MFC на Using MFC... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru