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

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

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

Показать сообщение отдельно
daslex
1280 / 524 / 107
Регистрация: 02.08.2011
Сообщений: 2,739
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;
}
как освобождать память теперь?
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru