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

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

Восстановить пароль Регистрация
 
hoot
 Аватар для hoot
100 / 21 / 3
Регистрация: 10.11.2010
Сообщений: 193
30.09.2011, 16:57     Ошибка при создании динамического массива. #1
Все доброго времени.

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

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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
30.09.2011, 17:04     Ошибка при создании динамического массива. #2
память выделите под массив то
C++
1
2
int *MyArray;
MyArray = new int[z];
Slimmy
 Аватар для 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;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
30.09.2011, 17:11     Ошибка при создании динамического массива. #4
Не забудьте потом добавить
C++
1
delete[] MyArray;
в конце программы
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
30.09.2011, 17:14     Ошибка при создании динамического массива. #5
Цитата Сообщение от Slimmy Посмотреть сообщение
C++
1
2
#include <iostream>
#include <clocale>
.....
Slimmy
 Аватар для Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
30.09.2011, 17:16     Ошибка при создании динамического массива. #6
Без <clocale> также компилируется. Более того, даже работает.
hoot
 Аватар для hoot
100 / 21 / 3
Регистрация: 10.11.2010
Сообщений: 193
30.09.2011, 17:50  [ТС]     Ошибка при создании динамического массива. #7
Все большое спасибо.

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

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

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

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

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

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
01.10.2011, 19:06     Ошибка при создании динамического массива. #17
Да и причем тут тогда выделение памяти? Какое отношение, инициализированный нулем, указатель имеет к выделению памяти?

Спор не бессмысленный. В след. раз вы возможно будете более понятнее излагать свои мысли, чтобы не путать других людей, которые эту всю информацию впитывают как губка.

Это называется критика.

Да и мне самому интересно. Вдруг это я не правильно понимаю суть, а в этом случае мне тогда все объяснять.
Yandex
Объявления
01.10.2011, 19:06     Ошибка при создании динамического массива.
Ответ Создать тему
Опции темы

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