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

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

Войти
Регистрация
Восстановить пароль
 
 
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
#1

Как определить массив, размерность которого определяет пользователь после запуска программы на выполнение? - C++

10.01.2014, 21:36. Просмотров 884. Ответов 23
Метки нет (Все метки)

C++
1
2
int k;
int mass[k];//к-еще не инициализирован, и поэтому выводится ошибка, а менять значение нельзя
Очевидно, что нужен указатель. Но как это реализовать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 21:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как определить массив, размерность которого определяет пользователь после запуска программы на выполнение? (C++):

Как сделать так,чтобы размерность массива вводил пользователь и массив заполнялся случайными числами? - C++
#include "stdafx.h" #include <iostream> #include <locale> #include <stdlib.h> using namespace std; void mas(int a) //вывод...

Многомерный массив значений, размерность которого возрастает. Оцените код - C++
Всем привет! 8-) У меня возникла задача, и я решил сначала придумать свой вариант ее решения, и уже затем, спрашивать совета у...

Дан массив действительных чисел, размерность которого N. Подсчитать, сколько в нем отрицательных, положительных и нулевых элементов - C++
Дан массив действительных чисел, размерность которого N. Подсчитать, сколько в нем отрицательных, положительных и нулевых элементов

Как объявить массив, размерность которого заранее не известна - C#
как определить массив если мы не знаем сколько элементов в нем будет? Заголовок продумываем

Как можно программно, после запуска программы, переместить окно программы на определенные координаты? - Visual Basic
Как можно программно, после запуска программы, переместить окно программы на определенные координаты?

Определить, как изменится массив после работы программы - Free Pascal
Написать программы: 1) В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном ниже фрагменте программы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
10.01.2014, 21:44 #2
C++
1
2
3
4
5
6
int *p;
int n;
cin >> n;
p = new int[n];
...
delete []p;
1
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
10.01.2014, 21:57  [ТС] #3
А если работать с классами?
TCLASS KLASS[n];
0
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
10.01.2014, 21:59 #4
Цитата Сообщение от casper007 Посмотреть сообщение
А если работать с классами?
TCLASS KLASS[n];
Абсолютно так же
C++
1
2
3
4
5
6
TCLASS *p;
int n;
cin >> n;
p = new TCLASS[n];
...
delete []p;
Если надо массив указателей на экземпляры класса, то так
C++
1
2
3
4
5
6
7
TCLASS **p;
int n;
cin >> n;
p = new TCLASS*[n];
p[0] = new TCLASS();//etc
...
delete []p;
1
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 392
10.01.2014, 22:06 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
int main()
{
    int N;//размер массива
    int *ptrArr;//указатель массива
 
    cout << "input num of array: ";
 
    scanf("%d", &N);
 
    ptrArr = new int[N];
 
    cout << ptrArr[0] << endl;
 
    delete ptrArr;
    
    return 0;
}
1
some_name
Вежливость-главное оружие
225 / 225 / 55
Регистрация: 19.02.2013
Сообщений: 1,438
10.01.2014, 22:17 #6
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
class Example
 {   
 public:     
     Example()
     {       
         id = count++;       
         cout<<"Create a new Example class - "<<id<<endl;
     }
     ~Example()
     {
         cout<<"Delte Example class - "<<id<<endl;
     }       
 private:
     static int count;
     int id;
 };
 
 int Example::count = 1;
 
void _tmain(int argc, _TCHAR* argv[])
{
    int size;   
    Example * arr_example;
 
    cout<<"Input array size:"; cin>>size;  
 
    arr_example = new Example[size];
    //some to do
    delete[] arr_example;
    getchar();
    getchar();
}
1
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
10.01.2014, 22:32 #7
Цитата Сообщение от ilja123 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
int main()
{
    int N;//размер массива
    int *ptrArr;//указатель массива
 
    cout << "input num of array: ";
 
    scanf("%d", &N);
 
    ptrArr = new int[N];
 
    cout << ptrArr[0] << endl;
 
    delete ptrArr;
    
    return 0;
}
Это неверно
delete ptrArr;
Надо
delete []ptrArr;
1
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 392
10.01.2014, 22:49 #8
Цитата Сообщение от AnDrew_LP Посмотреть сообщение
Это неверно
Как проверить??

Добавлено через 5 минут
Я думаю просто delete это язык Си Delete[] это язык С++ Но, как всегда в Сях пофиХ кто как хочет так и....
0
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
10.01.2014, 22:50 #9
Цитата Сообщение от ilja123 Посмотреть сообщение
Как проверить??
Никак. Компилятор ругаться не будет. Он не будет ругаться, если эту строку убрать вовсе. Но память освобождается неверно(верно только, если N=1).
C++
1
delete p;
- здесь освобождается только память, выделенная под первый элемент
C++
1
delete []p;
- так освобождается память, занятая под массив
Я думаю просто delete это язык Си Delete[] это язык С++ Но, как всегда в Сях пофиХ кто как хочет так и....
Нет. Если я не ошибаюсь, то в Си вообще нету такого оператора, а память выделяется с помощью malloc и освобождается с помощью free
0
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 392
10.01.2014, 22:52 #10
ну я в нете видел и такое
C++
1
2
for(i=0; i<=N; i++)
         delete p[i];
Хде правду искать???
0
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
10.01.2014, 22:58 #11
Цитата Сообщение от ilja123 Посмотреть сообщение
ну я в нете видел и такое
C++
1
2
for(i=0; i<=N; i++)
         delete p[i];
Хде правду искать???
Здесь двумерный массив. И освобождается память тоже неверно, надо так
C++
1
2
3
4
5
6
7
8
9
int **p;
//выделение памяти
p = new int*[5];
for(int i = 0; i < 5; i++)
     p[i] = new int[5];
//освобождение памяти
for(int i = 0; i < 5; i++)
     delete []p[i];
delete []p;
1
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 392
10.01.2014, 22:59 #12
Может вообще p[] = NULL Чтоб уж наверняка Контролльный так сказать
1
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
10.01.2014, 23:05 #13
Цитата Сообщение от ilja123 Посмотреть сообщение
Может вообще p[] = NULL Чтоб уж наверняка Контролльный так сказать
Скорее так)
C++
1
p = nullptr;
Это необязательно, нужно лишь для того, чтобы при попытке использовать этот указатель после того, как память была освобождена, выскочило NullReferenceException.
Иначе, будет использоваться не инициализированный участок памяти и поведение программы предсказать не выйдет.
2
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
10.01.2014, 23:15 #14
а че никто вектора не предлагает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
 
int main()
{
  int width = 10;
  int height = 20;
 
  std::vector<int> v(width);
 
  // двумерный
  std::vector< std::vector<int> > v2(height, std::vector<int>(width));
 
  //...
 
  // не надо никаких delete []. все сделается автоматом.
 
  return 0;
}
1
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
10.01.2014, 23:18  [ТС] #15
Цитата Сообщение от DU Посмотреть сообщение
а че никто вектора не предлагает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
 
int main()
{
  int width = 10;
  int height = 20;
 
  std::vector<int> v(width);
 
  // двумерный
  std::vector< std::vector<int> > v2(height, std::vector<int>(width));
 
  //...
 
  // не надо никаких delete []. все сделается автоматом.
 
  return 0;
}
Спасибо! Возьму на заметку.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 23:18
Привет! Вот еще темы с ответами:

Как определить масив, размерность кторого вычисляется в процессе работы программы? - VBA
Как определить масив, размерность кторого вычисляется в процессе работы программы: Т.е. идет строка: n =...

Создать динамический массив, размерность которого будет варьироваться - VBA
Здравствуй киберфорум, пришлось столкнуться с одной задачей, алгоритм выполнения которой понятен и просчитан, но так как планируется ввод...

Автоматическое выполнение кода после запуска приложения - Ruby on Rails
Всем здравствуйте. Столкнулся с такой необходимостью: сразу же после запуска приложения надо начать выполнение ruby-кода (создание...

Определить логический вектор, размерность которого равна размерности массивов координат - Matlab


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.01.2014, 23:18
Ответ Создать тему
Опции темы

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