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

Ошибка при освобождении памяти массива string - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа должна в себе учитывать 3 вещи: Наследование, Сортировка и Поиск по данным http://www.cyberforum.ru/cpp-beginners/thread1048950.html
Мне через пару дней нужно сдать курсовую работу, а она еще не готова. Я в отчаянье! Кто может у кого есть подобна программа поделитесь пожалуйста. Программа должна в себе учитывать 3 вещи: Наследование, Сортировка и Поиск по данным. Размер программы не важен лишь бы она работала и выполняла определенные функции которые указаны выше. Заранее большое спасибо.
C++ Задача на строки Здравствуйте. Мне на завтра несколько задач нужно дорешать, решила сама уже на нахождение количества разделителей в строке и на матрицы, осталась еще одна, завтра последний день сдачи((( сама признаюсь честно не смогу решить эту задачу. Помогите пожалуйста http://www.cyberforum.ru/cpp-beginners/thread1048949.html
Для автосалона составить каталог поддержанных автомобилей, C++
Извините, просто не успеваю к зачету))) Нужен код программы на C++ Хотя бы похожая программа Вот условие Для автосалона составить каталог поддержанных автомобилей, который должен содержать: 1) марка авто 2) адрес предыдущего владельца 3) пробег
C++ Ошибка в функции!
Господа знатоки, открытое шифрование Эль-Гамаля, функция дешифрования работает не правильно, например я шифрую текст: завтра в 8 часов , задаю параметры p,g,x , идет шифрование , зашифрованное сообщение получается например (7807 29351 1613 15576 9709 12646 20899 28406 2529 1648 31851 26996 16811 22620 6035 11610 3487 6188 28203 2180 15971 12776 16771 20323 25461 5380 6561 28225 12387 33270...
C++ Подключил мультиметр к ПК, нужно считать показатели в с++. http://www.cyberforum.ru/cpp-beginners/thread1048932.html
Доброго времени суток, уважаемые форумчане. Подскажите пожалуйста: есть мультиметр APPA 190n, я подключил его к ПК, и теперь мне нужно считать показатели в с++. То есть мультиметр посылает (мы считываем) знаки (16) в с++, мы обрабатываем его по следующим правилам: -каждая группа знаков (по два знака, первые 6) делится на группы всего групп три, каждая со своим условием, пара принадлежит ко...
C++ Вычислительные процессы, линейные и ветвящиеся Написать коды 1) Линейного процесса 2) Ветвящегося процесса простейшие, вида, 7+4=11 подробнее

Показать сообщение отдельно
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,204

Ошибка при освобождении памяти массива string - C++

19.12.2013, 21:10. Просмотров 273. Ответов 2
Метки (Все метки)

Вот тут вот при delete возникает ошибка, и пишет "The program '[4292] Array Template.exe: Native' has exited with code 3 (0x3)."
C++
1
2
3
4
5
6
7
8
9
10
11
template <class Type>
void Array<Type>::operator+=(Type value)
{
    Array<Type> tmp(*this); // сохраняем текущий массив
    delete [] theArray; // освобождаем память
    size++; // увеличиваем размер
    theArray = new Type[size]; // создаем новый массив
    for (int i = 0; i < size-1; i++)
        theArray[i] = tmp[i]; // копируем уже имеющиеся элементы
    theArray[size-1] = value; // и добавляем новый
}
Полный код:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include "stdafx.h"
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <conio.h>
#include <string>
using std::string;
 
template <class Type>
class Array
{
private:
    Type *theArray;
    int size;
    Type operator[](int n) const; // возвращает значение элемента с порядковым номером n
public:
    Array(); // конструктор по умолчанию
    Array(Type); // конструктор по значению информационного поля
    Array(const Array &); // конструктор-копировщик
    ~Array(); // деструктор
    int GetSize() const; // возвращает размер массива
    void operator += (Type value); // добавляет в конец элемент value
    void Print() const; // выводит на экран
    void Add(Type value); // добавляет в конец элемент value
    int Find(Type value) const; // находит номер элемента (номера начиная с 1), если такого элемента нет, 0
    void Delete(int); // удаляет элемент с заданным номером (номера начиная с 1)
};
 
int main()
{
    cout << "Massiv int" << endl;
    Array<int> a(5); // инициализируем массив элементом 5
    a += 6; // добавляем элемент 6
    a.Add(7); // добавляем элемент 7
    a.Print(); // выводим на экран
    cout << "Nomer elementa '7': " << a.Find(7) << endl;
    cout << "Nomer elementa '3': " << a.Find(3) << endl;
    cout << "Udalim element nr.2..." << endl;
    a.Delete(2);
    a.Print();
    cout << endl;
    getch();
 
    cout << "Massiv double" << endl;
    Array<double> b(5.22);
    b += 6.73;
    b.Add(7.85);
    b.Print();
    cout << "Nomer elementa '7.85': " << b.Find(7.85) << endl;
    cout << "Nomer elementa '3': " << b.Find(3) << endl;
    cout << "Udalim element nr.3..." << endl;
    b.Delete(3);
    b.Print();
    cout << endl;
    getch();
 
    cout << "Massiv string" << endl;
    Array<string> c("Stroka1");
    c += "Stroka2";
    c.Add("Stroka3");
    c.Print();
    cout << "Nomer elementa 'Stroka1': " << c.Find("Stroka1") << endl;
    cout << "Nomer elementa 'Stroka': " << c.Find("Stroka") << endl;
    cout << "Udalim element nr.2..." << endl;
    c.Delete(2);
    c.Print();
    getch();
    return 0;
}
 
template <class Type> // конструктор по умолчанию
Array<Type>::Array(): size(0), theArray(NULL)
{
}
 
template <class Type> // конструктор по значению информационного поля
Array<Type>::Array(Type value): size(1)
{
    theArray = new Type;
    theArray[0] = value;
}
 
template <class Type> // конструктор-копировщик
Array<Type>::Array(const Array &theObject)
{
    size = theObject.GetSize();
    theArray = new Type[size];
    for (int i = 0; i < size; i++)
        theArray[i] = theObject[i]; // и копируем все элементы
}
 
template <class Type> // возвращает размер массива
int Array<Type>::GetSize() const
{
    return size;
}
 
template <class Type> // возвращает значение элемента с порядковым номером n
Type Array<Type>::operator[](int n) const
{
    return theArray[n];
}
 
template <class Type>
void Array<Type>::operator+=(Type value)
{
    Array<Type> tmp(*this); // сохраняем текущий массив
    delete [] theArray; // освобождаем память
    size++; // увеличиваем размер
    theArray = new Type[size]; // создаем новый массив
    for (int i = 0; i < size-1; i++)
        theArray[i] = tmp[i]; // копируем уже имеющиеся элементы
    theArray[size-1] = value; // и добавляем новый
}
 
template <class Type> // деструктор
Array<Type>::~Array()
{
    delete [] theArray;
}
 
template <class Type>
void Array<Type>::Print() const
{
    cout << "Size: " << size << endl << "Array: ";
    for (int i = 0; i < size; i++)
        cout << theArray[i] << " ";
    cout << endl;
}
 
template <class Type>
void Array<Type>::Add(Type value)
{
    Array<Type> tmp(*this); // сохраняем текущий массив
    delete [] theArray; // освобождаем память
    size++; // увеличиваем размер
    theArray = new Type[size]; // создаем новый массив
    for (int i = 0; i < size-1; i++)
        theArray[i] = tmp[i]; // копируем уже имеющиеся элементы
    theArray[size-1] = value; // и добавляем новый
}
 
template <class Type>
int Array<Type>::Find(Type value) const
{
    for (int i = 0; i < size; i++)
        if (theArray[i] == value)
            return i+1;
    return 0;
}
 
template <class Type>
void Array<Type>::Delete(int n)
{
    if ((n < 1) || (n > size))
        return;
    Array<Type> tmp;
    for (int i = 0; i < size; i++)
        if (i != n-1)
            tmp.Add(theArray[i]);
    delete [] theArray;
    size--;
    theArray = new Type[size];
    for (int i = 0; i < size; i++)
        theArray[i] = tmp[i];
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru