Форум программистов, компьютерный форум CyberForum.ru

Почему обращение к недоступному адресу в памяти - C++

Восстановить пароль Регистрация
 
лыс
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 50
22.12.2012, 20:13     Почему обращение к недоступному адресу в памяти #1
Почему при проверке кода(компиляции) выскакивает сообщение :"Недостаточный размер массивов или обращение по недоступному адресу в памяти" ? Хотя размер достаточно большой 1000*1000.

Программист Денис c детства мечтал побывать в Антарктиде, но почему-то регулярных рейсов туда нет. Поэтому Денис все лето изучал Антарктиду с помощью соседнего кинотеатра. Теперь он знает, что в Антарктиде водится несколько видов пингвинов:

Императорские пингвины (Emperor Penguins)
Малые пингвины (Little Penguins)
Пингвины Макарони (Macaroni Penguins)

К сожалению, в мультфильмах не было сказано, какой вид пингвинов самый многочисленный. Денис решил выяснить это: он посмотрел эти мультфильмы еще раз, и каждый раз, когда видел пингвина, записывал в блокнот название его вида. Сейчас Денис дал вам блокнот с просьбой выяснить, какой вид пингвинов самый многочисленный.
Исходные данные
В первой строке записано целое число n — количество записей в блокноте (1 ≤ n ≤ 1000). В каждой из следующих n строк записано по одному виду пингвинов. Среди видов встречаются только «Emperor Penguin», «Little Penguin» и «Macaroni Penguin».
Результат
Выведите самый популярный вид пингвинов. Гарантируется, что такой вид только один.
На входе
7
Emperor Penguin
Macaroni Penguin
Little Penguin
Emperor Penguin
Macaroni Penguin
Macaroni Penguin
Little Penguin

На выходе
Macaroni Penguin




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
#include <iostream>
#include <cstdio>
 
using namespace std;
 
int main()
{
int n, e=0, m=0, l=0;
char **mas=new char*[1000];
 for (int i=0; i<1000; i++)
  mas[i]=new char[40];
 
cin >> n;
 
for (int i=0; i<=n; i++)
 gets(mas[i]);
for (int i=0; i<=n; i++)
 {
 if (mas[i][0] == 'M')
  m++;
 if (mas[i][0] == 'E')
  e++;
 if (mas[i][0] == 'L')
  l++;
 }
 
if (m>e && m>l)
 cout << "Macaroni Penguin" << endl;
if (l>m && l>e)
 cout << "Little Penguin" << endl;
if (e>l && e>m)
 cout << "Emperor Penguin" << endl;
 
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2012, 20:13     Почему обращение к недоступному адресу в памяти
Посмотрите здесь:

Данные по адресу памяти C++
C++ Прочитать из памяти по адресу
Обращение по адресу к элементам структуры C++
C++ Как сделать массив в памяти по фиксированному адресу?
Доступ к памяти по адресу C++
Выделение памяти по известному адресу C++
Доступ к произвольному адресу памяти C++
C++ Вызов функции-члена класса по адресу в памяти

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,171
Завершенные тесты: 1
22.12.2012, 20:45     Почему обращение к недоступному адресу в памяти #2
У меня все компилируется и правильно работает.
Заметил только логическую ошибку.
Количество вводимых строк не n, а (n+1).
Yandex
Объявления
22.12.2012, 20:45     Почему обращение к недоступному адресу в памяти
Ответ Создать тему
Опции темы

Текущее время: 13:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru