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

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

Войти
Регистрация
Восстановить пароль
 
 
hoot
101 / 22 / 5
Регистрация: 10.11.2010
Сообщений: 208
#1

Ошибка при создании динамического массива. - C++

30.09.2011, 16:57. Просмотров 1028. Ответов 16
Метки нет (Все метки)

Все доброго времени.

Начал создавать одномерный массив, потом решил его преобразовать в динамический одномерный.
Понимаю что проблема при указанни с клавы размерности, но как исправить не знаю.
Раскажите что и как. Желательно особо подробно.
Заранее все благодарен.

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
#include <iostream>
 
 
using namespace std;
 
int main()
{
setlocale(LC_ALL,"russian");
 
int z;
 
cout<<"Введите размер массива: ";
cin>>z;
 
int myArray[z];
int i;
for(i=0; i<5; i++)
{
    cout<<"Значение для занесение в массив["<<i<<"]:";
    cin>>myArray[i];
}
 
for(i=0;i<5;i++)
    cout<<i+1<<":"<<myArray[i]<<"\n";
 
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2011, 16:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при создании динамического массива. (C++):

Ошибка при создании динамического двумерного массива - C++
Ткните пальцем, что не так. Только учусь, делаю лабы, камнями не забрасывайте. Смотрел шаблоны здесь и в других местах, но есть вопрос. ...

Ошибка при создании 2-го элемента динамического списка - C++
НЕ могу понять откуда как исправить данную ошибка . Выскакивает как мне кажется при попытке динамически выделить память для указателя на...

Почему при создании динамического массива через new ячейки массива имеют значение -842150451? - C++
Я хотел бы узнать почему при создании динамического массива через операцию new ячейки массива имеют значение -842150451. #include...

передача параметров в конструктор при создании динамического массива - C++
Добрый день! Есть довольно тривиальный класс: class Array1d{ int* ptr_; public: Array1d(int n): ptr_(new...

String subscript out of range при создании динамического массива - C++
Всем привет. Пишу игру на c++. Смысл состоит в том чтобы отстреливать группы врагов, которые появляются сразу после уничтожения предыдущей...

Ругается new при создании динамического массива через перегруженный конструктор - C++
Перегрузил конструктор: class Library { public: Library(void) //конструктор библиотеки без заданного типа { ...

16
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
30.09.2011, 17:04 #2
память выделите под массив то
C++
1
2
int *MyArray;
MyArray = new int[z];
1
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
30.09.2011, 17:11 #3
Отредактировал Ваш код на скорую руку. Но ошибок вроде бы нет.
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"russian");
    int * myArray = NULL, z; 
    do{
        cout << "Введите размер массива: ";
        cin >> z;
    }
    while(z <= 0);
    myArray = new int [z];
    if(myArray == NULL){
        cout << "Память не захвачена." << endl;
        system("pause");
        return 1;
    }
    for(int i = 0; i < z; i++)
    {
        cout << "Значение для занесение в массив[" << i + 1 << "]: ";
        cin >> myArray[i];
    }
 
    for(int i = 0; i < z; i++)
        cout << i+1 << "-элемент: " << myArray[i] <<"\n";
 
    system("pause");
    delete[] myArray;
    return 0;
}
1
MrGluck
Модератор
Эксперт CЭксперт С++
7510 / 4642 / 700
Регистрация: 29.11.2010
Сообщений: 12,678
30.09.2011, 17:11 #4
Не забудьте потом добавить
C++
1
delete[] MyArray;
в конце программы
1
MrGluck
Модератор
Эксперт CЭксперт С++
7510 / 4642 / 700
Регистрация: 29.11.2010
Сообщений: 12,678
30.09.2011, 17:14 #5
Цитата Сообщение от Slimmy Посмотреть сообщение
C++
1
2
#include <iostream>
#include <clocale>
.....
1
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
30.09.2011, 17:16 #6
Без <clocale> также компилируется. Более того, даже работает.
1
hoot
101 / 22 / 5
Регистрация: 10.11.2010
Сообщений: 208
30.09.2011, 17:50  [ТС] #7
Все большое спасибо.

Цитата Сообщение от Slimmy Посмотреть сообщение
int * myArray = NULL, z;
Я правильно понимаю,что в выше записанном коде "NULL" означает что массив по умолчанию не имеет данных.
Или как понимать?
0
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
30.09.2011, 17:54 #8
Цитата Сообщение от hoot Посмотреть сообщение
Все большое спасибо.
Я правильно понимаю,что в выше записанном коде "NULL" означает что массив по умолчанию не имеет данных.
Или как понимать?
В данной строчке происходит так называемое "зануление" указателя. То есть происходит его инициализация. Дело в том, что под динамический массив идет выделение памяти и чтобы она была чистой, без "мусора", необходимо её "почистить".
1
hoot
101 / 22 / 5
Регистрация: 10.11.2010
Сообщений: 208
30.09.2011, 18:01  [ТС] #9
Понятно, спасибо)
Ты давно пишешь на с++?
1
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
30.09.2011, 18:04 #10
Цитата Сообщение от hoot Посмотреть сообщение
Понятно, спасибо)
Ты давно пишешь на с++?
Ну как Вам сказать... В университете С++ со второго курса пошел. Фактически - "программирую" год. Но в это программирование входило лишь выполнение лабораторных работ и больше ничего. Сейчас начал заниматься самостоятельно: книжки там читать всякие умные, упражнения делать. Вообщем, практиковаться.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,134
30.09.2011, 23:11 #11
Цитата Сообщение от Slimmy Посмотреть сообщение
В данной строчке происходит так называемое "зануление" указателя. То есть происходит его инициализация. Дело в том, что под динамический массив идет выделение памяти и чтобы она была чистой, без "мусора", необходимо её "почистить".
Вы хотите сказать, что все элементы динамического массива инициализируются нулем при выделении памяти из-за того, что указатель имеет значение 0? Бред какой-то.

Добавлено через 10 минут
Операция new возвратит адрес на этот массив и этот адрес присвоится указателю. Никакого влияния нулевой указатель не окажет на выделение памяти под массив.
0
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
01.10.2011, 09:18 #12
Цитата Сообщение от Chelioss Посмотреть сообщение
Операция new возвратит адрес на этот массив и этот адрес присвоится указателю. Никакого влияния нулевой указатель не окажет на выделение памяти под массив.
Покажите, где написано, что я сказал, что всем элементам массива присваивается 0? Инициализация указателя нужна для того, чтобы гарантировать что по адресу этого указателя ничего не будет, то бишь "мусора".

Добавлено через 10 минут
Следовательно, при инициализации указателя макросом NULL мы будем уверены в том, что:
а) указатель никуда не ссылается;
б) его на данный момент нельзя использовать;
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,134
01.10.2011, 18:35 #13
Цитата Сообщение от Slimmy Посмотреть сообщение
Дело в том, что под динамический массив идет выделение памяти и чтобы она была чистой, без "мусора", необходимо её "почистить".
Если еще не понятно, что вы сами написали, то перефразирую:
Цитата Сообщение от Slimmy Посмотреть сообщение
Дело в том, что под динамический массив идет выделение памяти и чтобы память была чистой, без "мусора", необходимо её "почистить".
Или вы под памятью понимаете указатель?
0
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
01.10.2011, 18:37 #14
Цитата Сообщение от Chelioss Посмотреть сообщение
Чистая память. Как еще по другому понимать?
Может сделаете усилие и прочитаете мое предыдущее сообщение. Порой, ответы на вопросы находятся ближе, чем Вы думаете.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,134
01.10.2011, 19:03 #15
Цитата Сообщение от Slimmy Посмотреть сообщение
Может сделаете усилие и прочитаете мое предыдущее сообщение. Порой, ответы на вопросы находятся ближе, чем Вы думаете.
А может вы будете свои мысли излагать нормально? И зачем мне искать ответ? Вы вопрос что ли задавали? И самое главное - понял ли вас правильно ТС?
0
01.10.2011, 19:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2011, 19:03
Привет! Вот еще темы с ответами:

Ошибка при удалении динамического массива - C++
Доброго времени суток! ПРоблема заключается в том, что при попытке очистить память из под динамического массива вылетает ошибка &quot;access...

Ошибка при выводе динамического массива - C++
Здравствуйте! Я создаю динамический массив, заполняю его и при выводе вылетает ошибка &quot;program.exe has stopped working&quot;. #include...

Ошибка при удалении динамического массива - C++
Непонятная мне ошибка при удалении массива #include &lt;iostream&gt; #include &lt;conio.h&gt; using std::cout; using std::cin; using...

Ошибка при заполнении динамического массива - 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 ; ...


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

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

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