Я не могу понять, почему моя программа работает успешно, а затем сбой при деструкторе. Ниже приведен мой основной() исходный код (который довольно прост, он отправляет массив из 5 переменных в шаблон класса, который создает соответствующий тип. Я провел некоторое исследование и, похоже, отсутствовал что-то, что может вызвать сбой из-за дополнительной ? вызов деструктора Я немного fuzzled, и это, скорее всего, простое исправлениеПрограмма Crashing at Destructor
main.cpp:. содержимое файла
int main()
{
// using integer data type
int arraya[5] = { 1, 2, 3, 4, 5 };
GenericArray<int> a(arraya, 5);
a.print();
// using float data type
float arrayb[5] = { 1.012, 2.324, 3.141, 4.221, 5.327 };
GenericArray<float> b(arrayb, 5);
b.print();
// using string data type
string arrayc[] = { "Ch1", "Ch2", "Ch3", "Ch4", "Ch5" };
GenericArray<string> c(arrayc, 5);
c.print();
return 0;
}
заголовка:
#ifndef GENERIC_ARRAY_H
#define GENERIC_ARRAY_H
#include<string>
#include<iostream>
template<typename type>
class GenericArray
{
public:
GenericArray(type array[], int arraySize); // constructor
~GenericArray(); // destructor
void print(); // the print function
GenericArray(const GenericArray &obj); //copy constructor
private:
type *ptr; //new pointer of respective type
int size;
};
template<typename type>//print() function
void GenericArray<type>::print()
{
for (int index = 0; index < size; index++)
{
cout << ptr[index] << " ";
}
cout << endl;
}
template<typename type>//Constructor
GenericArray<type>::GenericArray(type array[], int arraySize)
{
size = arraySize;
ptr = new type[size];
ptr = array;
}
template<typename type>//Destructor
GenericArray<type>::~GenericArray()
{
cout << "Freeing Memory!";
delete[] ptr;
}
template<typename type>//Copy Constructor
GenericArray<type>::GenericArray(const GenericArray &obj)
{
*ptr = *obj.ptr;
}
#endif
'delete []' может вызываться только для указателя, выделенного с помощью 'new' – Amadeus
под конструктором класса, ptr выделяется память. –
@ Тони Комито Привет, гений. Конструктор и конструктор копирования недействительны. Вам нужно скопировать элементы массива вместо назначения временного указателя. –