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

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

Восстановить пароль Регистрация
 
LeeMein
0 / 0 / 0
Регистрация: 31.07.2015
Сообщений: 6
01.08.2015, 11:56     Вылетает программа при заполнении массива #1
Добрый день.
Решил написать простой код отрисовки карты в консоли.
Идея:
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;
         
         }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2015, 11:56     Вылетает программа при заполнении массива
Посмотрите здесь:

C++ Сообщение о ошибке при заполнении массива
C++ Ошибка при заполнении массива малыми числами
Глюк при заполнении массива C++
C++ ошибка при заполнении массива
Ошибка при заполнении массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MansMI
1046 / 843 / 205
Регистрация: 08.01.2012
Сообщений: 3,026
01.08.2015, 12:03     Вылетает программа при заполнении массива #2
не увидел coorx[], coory[] каких размеров?
LeeMein
0 / 0 / 0
Регистрация: 31.07.2015
Сообщений: 6
01.08.2015, 12:28  [ТС]     Вылетает программа при заполнении массива #3
Спасибо, не заметил , исправил, у меня в коде coorx[x] и corry[y], но к сожалению, положение не изменилось.
Не могу понять почему у меня не получается присвоить значения при помощи for. Программа просто вылетает. Проверил, координаты заполнены верно на момент входа в цикл, во время выполнения счет тоже идет верно...
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.08.2015, 12:29     Вылетает программа при заполнении массива #4
Цитата Сообщение от MansMI Посмотреть сообщение
coorx[], coory[] каких размеров?
Никаких, в этом и ошибка. По Стандарту вообще не должно компилироваться, но гццэшечка терпит ... и падает в итоге.

Добавлено через 34 секунды
Цитата Сообщение от LeeMein Посмотреть сообщение
не заметил , исправил,
Покажи исправленный вариант как получилось.
MansMI
1046 / 843 / 205
Регистрация: 08.01.2012
Сообщений: 3,026
01.08.2015, 12:33     Вылетает программа при заполнении массива #5
как исправил? #define или new пользовал?
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;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.08.2015, 12:44     Вылетает программа при заполнении массива #7
C++
1
2
3
4
5
struct land{ 
       char des;
       int coorx[/*здесь должен быть размер*/]; 
       int coory[/*и здесь тоже*/];
       };
MansMI
1046 / 843 / 205
Регистрация: 08.01.2012
Сообщений: 3,026
01.08.2015, 12:44     Вылетает программа при заполнении массива #8
Цитата Сообщение от LeeMein Посмотреть сообщение
earth.coorx[x]; earth.coory[y];
сурово, это к чему то обязывает?
LeeMein
0 / 0 / 0
Регистрация: 31.07.2015
Сообщений: 6
01.08.2015, 13:09  [ТС]     Вылетает программа при заполнении массива #9
Tulosba, MansMI, Благодарю за помощь, все заработало, сам бы я еще долго ковырялся
Хотелось бы под подытожить.
При объявлении структуры, я указываю размер массива, точно так же как при объявлении обычного массива. В моем случае, я пытался... обратится к earth.coorx и earth.coory с ключом x и y.
Только вот странно, что компилятор не отреагировал на безразмерный массив.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2015, 13:14     Вылетает программа при заполнении массива
Еще ссылки по теме:

C++ При обращении к индексу двумерного массива char программа вылетает с ошибкой
При расширении первой строки двумерного массива (с помощью realloc) программа вылетает C++
Ошибка при заполнении динамического массива C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.08.2015, 13:14     Вылетает программа при заполнении массива #10
Цитата Сообщение от LeeMein Посмотреть сообщение
странно, что компилятор не отреагировал на безразмерный массив.
Либо смени компилятор, либо добавь ключ -pedantic
Yandex
Объявления
01.08.2015, 13:14     Вылетает программа при заполнении массива
Ответ Создать тему
Опции темы

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