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

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

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

Вылетает программа при заполнении массива - C++

01.08.2015, 11:56. Просмотров 305. Ответов 9
Метки нет (Все метки)

Добрый день.
Решил написать простой код отрисовки карты в консоли.
Идея:
1.Создаю объект структуры, содержащий перечень координат в массивах coorx и coory и графическое обозначение
2.Передаю значения координат в ключи массива map и присваиваю ячейке соответственное граф.обозначение
Проблема:
Для теста решил заполнить массивы coorx и coory на всю ширину и высоту карты.
Но, в результате манипуляций с for, массив map отказывается принимать какие либо значения, и программа аварийно заканчивает работу.
После каждого for выводил текстовые маяки "начало заполнения" и "Успешно". Зависает именно на присвоении.
Так же выводил значения coorx и coory, до,внутри и после for. Все значения отображаются.
Как решить проблему,где я не прав?

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
#include <iostream>
using namespace std;
struct land{ // структура ланд, в объектах которой должны содержатся граф - ок обозначение и массивы координат
       char des;
       int coorx[];
       int coory[];
       };
int main(int argc, char** argv) {
    setlocale(LC_CTYPE, "rus");
    int x = 10; //координата x аkа ширина поля
    int y = 5;  //координата y aka высота поля
    char map[y][x]; //создаю массив символов aka карта
    land earth; // обект "земля"
    earth.des = '.'; //графическое обозначение "земли"
    /*Заполняю массив координат y, где ключ равен значению */
    for(int i = 0;i<y;i++){ 
        earth.coory[i] = i;
    };
    /*Заполняю массив координат x, где ключ равен значению */
    for(int j = 0;j<x;j++){
        earth.coorx[j] = j;
    };
    /*В идеале map[earth.coory[1]][earth.coorx[1]] = earth.des; 
    Но, после манипуляций с координатами, массив отказывается принимать какие либо значения.
    Программа аварийно вылетает, без отчета об ошибках
    */
    map[1][2] = 'E';
    cout<<map[1][2];    
    return 0;
}
Добавлено через 17 минут
Проблема решена, объявил переменные x и у константами, и все заработала. Возник вопрос - почему?

Добавлено через 10 минут
А вот так, вылетает:
C++
1
2
3
4
5
for(int i = 0;i<y;i++){
       for(int j = 0;j<x;j++)
       map[earth.coory[i]][earth.coorx[j]] = earth.des;
         
         }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2015, 11:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вылетает программа при заполнении массива (C++):

При обращении к индексу двумерного массива char программа вылетает с ошибкой - C++
Программа вылетает с ошибкой на 66й строке. Почему?((( // Task_1.cpp : Defines the entry point for the console application. // ...

При расширении первой строки двумерного массива (с помощью realloc) программа вылетает - C++
При расширении первой строки двумерного массива с помощью realloc, программа вылетает. Собственно вопрос, что я напутал при добавлении...

Глюк при заполнении массива - C++
Заполняю массив float row float j=0; for (int i=0;i&lt;501;i++) { row=j; cout&lt;&lt;j&lt;&lt;endl; j += 0.02; ...

Ошибка при заполнении массива - C++
Объявляю и пытаюсь заполнить так: TArray__1&lt;System::Byte&gt; *buffer; buffer = new TArray__1 &lt;System::Byte&gt; (6); buffer='r'; ...

Ошибка при заполнении массива - C++
Помогите пожалуйста решить проблему: Это программа для игры в крестики нолики. В первой функции void instruction() необходимо вывести...

ошибка при заполнении массива - C++
хочу заполнить массивы класса (и сразу же записать в файл), если выбрать количество записей - 1, то все работает нормально, но больше...

9
MansMI
1292 / 1070 / 299
Регистрация: 08.01.2012
Сообщений: 4,069
01.08.2015, 12:03 #2
не увидел coorx[], coory[] каких размеров?
0
LeeMein
0 / 0 / 0
Регистрация: 31.07.2015
Сообщений: 6
01.08.2015, 12:28  [ТС] #3
Спасибо, не заметил , исправил, у меня в коде coorx[x] и corry[y], но к сожалению, положение не изменилось.
Не могу понять почему у меня не получается присвоить значения при помощи for. Программа просто вылетает. Проверил, координаты заполнены верно на момент входа в цикл, во время выполнения счет тоже идет верно...
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.08.2015, 12:29 #4
Цитата Сообщение от MansMI Посмотреть сообщение
coorx[], coory[] каких размеров?
Никаких, в этом и ошибка. По Стандарту вообще не должно компилироваться, но гццэшечка терпит ... и падает в итоге.

Добавлено через 34 секунды
Цитата Сообщение от LeeMein Посмотреть сообщение
не заметил , исправил,
Покажи исправленный вариант как получилось.
0
MansMI
1292 / 1070 / 299
Регистрация: 08.01.2012
Сообщений: 4,069
01.08.2015, 12:33 #5
как исправил? #define или new пользовал?
0
LeeMein
0 / 0 / 0
Регистрация: 31.07.2015
Сообщений: 6
01.08.2015, 12:39  [ТС] #6
Так, объявил координаты x и y как константы, установил размеры для массивов координат.На всякий случай map теперь квадрат. Вот в таком виде зависает:
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
#include <iostream>
using namespace std;
struct land{ 
       char des;
       int coorx[];
       int coory[];
       };
int main(int argc, char** argv) {
    setlocale(LC_CTYPE, "rus");
    const int x = 5; 
    const int y = 5; 
    char map[y][x]; 
    land earth; 
    earth.des = '.'; 
    earth.coorx[x];
    earth.coory[y];
    for(int i = 0;i<y;i++){ 
        earth.coory[i] = i;
    };
 
    
    for(int j = 0;j<x;j++){
        earth.coorx[j] = j;
        
    };
    /*  for(int j = 0;j<y;j++){ 
        cout<<"ИКС"<<earth.coorx[j]<<"\n";
        };*/
   for(int i = 0;i<y;i++){
     for(int n = 0;n<x;n++)
        //cout<<earth.coory[i]<<earth.coorx[n]<<"\n";
        // cout<<<<"\n";
      map[earth.coory[i]][earth.coorx[n]] = earth.des;  
     }
    
    map[1][1] = 'E';
    cout<<map[1][1];    
    return 0;
}
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.08.2015, 12:44 #7
C++
1
2
3
4
5
struct land{ 
       char des;
       int coorx[/*здесь должен быть размер*/]; 
       int coory[/*и здесь тоже*/];
       };
1
MansMI
1292 / 1070 / 299
Регистрация: 08.01.2012
Сообщений: 4,069
01.08.2015, 12:44 #8
Цитата Сообщение от LeeMein Посмотреть сообщение
earth.coorx[x]; earth.coory[y];
сурово, это к чему то обязывает?
1
LeeMein
0 / 0 / 0
Регистрация: 31.07.2015
Сообщений: 6
01.08.2015, 13:09  [ТС] #9
Tulosba, MansMI, Благодарю за помощь, все заработало, сам бы я еще долго ковырялся
Хотелось бы под подытожить.
При объявлении структуры, я указываю размер массива, точно так же как при объявлении обычного массива. В моем случае, я пытался... обратится к earth.coorx и earth.coory с ключом x и y.
Только вот странно, что компилятор не отреагировал на безразмерный массив.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.08.2015, 13:14 #10
Цитата Сообщение от LeeMein Посмотреть сообщение
странно, что компилятор не отреагировал на безразмерный массив.
Либо смени компилятор, либо добавь ключ -pedantic
0
01.08.2015, 13:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2015, 13:14
Привет! Вот еще темы с ответами:

Объяснить почему при заполнении матрицы программа уходит в бесконечный цикл - C++
#include &lt;iostream&gt; using namespace std; int main() { int mas; for (int i = 0; i &lt; 3;) { for (int j = 0; j &lt; 4;j++) ...

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

Ошибка при заполнении динамического массива - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int N, i, a, l; int head = -1; char ch; int *s = new int ; ...

Сообщение о ошибке при заполнении массива - C++
Привет всем! Возникла проблемма при заполнении массива малыми числами. При компиляции выводится сообщение &quot;floating constant truncated...


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

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

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