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

Добавить значение в конец динамического массива (имитация функции вектора) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Расставить 8 ферзей на шахматной доске 8 на 8, которые не бьют друг друга http://www.cyberforum.ru/cpp-beginners/thread724481.html
Нужно написать программу которая расставляет на шахматной доске 8 ферзей, которые не бьют друг друга. обязательно использование рекурсии, ну и struct . Извините если такая тема была, интернет 64кбитный. Спасибо =) Добавлено через 2 часа 5 минут Ап темы Добавлено через 2 часа 0 минут ап темы
C++ ifstream читает файл со второй строки Добрый день, читаю файл через fstream и записываю его, запись идет только со второй строки, не могу понять почему #include <iostream> #include <cctype> #include <fstream> #include <string> #define COLS 80 using namespace std; int replace(char*, char*); http://www.cyberforum.ru/cpp-beginners/thread724479.html
Одномерные динамические массивы (осуществить ввод, проверку, вывод результатов) C++
Очень прошу помочь с написанием этой программы.Говорят что легкая но у меня никак не выходит.Частями вроде бы получается, однако все детали, предложенные здесь, сделать не могу :( Одномерные массивы Память под массивы выделяется динамически. Необходимо: - осуществить проверку на правильность ввода размерности массивов. Массивы должны состоять не менее, чем из одного элемента; - ...
C++ Ошибка инициализации объекта, конструктором класса
Добрый день. Написал программу. Создание класса (упражнение из книги Дейтеля) "Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих клиентов. Ваш класс должен иметь один элемент данных типа int для представления банковского баланса. Класс должен предусматривать конструктор, принимающий начальный баланс, используемый для инициализации...
C++ Структуры (напечатать самое распространенное женское имя) http://www.cyberforum.ru/cpp-beginners/thread724434.html
Приветствую! Всем хорошего настроения! Только вот у меня его совсем нет..... Сессия на носу, необходимо последнюю лабораторку допинать, а не получается:( Если кто нибудь поможет, буду очень благодарен. Задание выглядит так: На основе таблицы, содержащей следующую информацию о каждом из 20 студентов некоторого ВУЗА:фамилия,имя,отчество,пол,возраст,курс причем в фамилии, имени и отчестве-не...
C++ Прерывания Друзья, вот архив с DOC-ким файлом, помогите реализовать программу,задание под пунктом ПРИМЕР ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ подробнее

Показать сообщение отдельно
daslex
1088 / 498 / 102
Регистрация: 02.08.2011
Сообщений: 2,479
09.12.2012, 13:14  [ТС]     Добавить значение в конец динамического массива (имитация функции вектора)
Ctrl+F5 запускаю.

=============
Там еще одна утечка. Может из-за нее? P утекает. еще не исправил я, может поможет

Добавлено через 4 минуты
не помогло. ошибка

Добавлено через 16 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void add(int**P,int &N,int x) //добавляю один элемент в конец массива
{
  N++; //увеличиваю диапазон значений на один
  int *temp=new int[N+1]; //временный указатель
  int *temp2;
 
  for (int i = 0; i < N; i++)  temp[i]=(*P)[i]; //копирую данные из кучи *P в кучу temp
  temp[N-1]=x; //Дописываю элемент
  show(&temp,N); //вызывает ошибку
 
  //тут проблема!!!
  for (int i = 0; i < N; i++) (*P)[i]=temp[i]; //копирую обратно. 
  *P=temp; //К P не было добавлено выделенной ячейки памяти
  delete temp;
}
так всё как-то не так. Память должна добавиться, но она не будет добавлена. Как быть?

Добавлено через 22 минуты
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
40
41
#include <iostream>
 
using namespace std;
 
void show(int **P,int N)  //отображение массива
{
  for (int i=0;i<N;i++) cout<<(*P)[i]<<"  ";
  cout<<endl;
}
 
void create(int **P,int N) //создание массива
{
    *P=new int[N]; //выделяю память
    for (int i=0;i<N;i++) (*P)[i]=i+1; //Заполняю
}
 
/*ВОТ ТУТ НЕ ЗНАЮ КАК*/
void add(int**P,int &N,int x) //добавляю один элемент в конец массива
{
    N++;
 
    P[N]=new int[sizeof(N)]; //выделяю память для новой ячейки
    (*P)[N-1]=x;    //записываю значение
}
 
int main()
{
    int *P; //Указатель будет использован как массив
    int N=0; //число элементов в массиве
    cin>>N;
    ////////////////
 
    create(&P,N); //создание массива с выделением памяти
    show(&P,N); //отображаю массив на экране
    add(&P,N,100); //попытка выделить ячейку памяти в конец массива и поместить туда 100, не затирая остального
    show(&P,N);
    add(&P,N,200);
    show(&P,N);
 
    return 0;
}
Исправил. при первом добавлении всё норм, а при втором ошибка.
Вопрос с освобождением памяти остался

Добавлено через 14 минут
До 50 теперь норм, дальше ошибка
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
40
41
42
43
44
45
46
47
48
#include <iostream>
 
using namespace std;
 
void show(int **P,int N)  //отображение массива
{
  for (int i=0;i<N;i++) cout<<(*P)[i]<<"  ";
  cout<<endl;
}
 
void create(int **P,int &N) //создание массива
{
    N++;
    *P=new int[N]; //выделяю память
    for (int i=0;i<N;i++) (*P)[i]=i+1; //Заполняю
    
}
 
/*ВОТ ТУТ НЕ ЗНАЮ КАК*/
void add(int**P,int &N,int x) //добавляю один элемент в конец массива
{   
    P[N]=new int[sizeof(int)];
    (*P)[N]=x;  
     N++;
}
 
int main()
{
    int *P; //Указатель будет использован как массив
    int N=0; //число элементов в массиве
    cin>>N;
    ////////////////
 
    create(&P,N); //создание массива с выделением памяти
   
    
    /*Запись в конец по одному значению циклом*/
    show(&P,N);
    for (int i=0;i<40;i++)
    {
      add(&P,N,i+i);
      show(&P,N);
 
    }
    
    
    return 0;
}
как освобождать память теперь?
 
Текущее время: 12:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru