析构函数中的程序崩溃

托尼·科米托(Tony Comito)

我似乎无法理解为什么我的程序成功运行然后在析构函数中崩溃。下面是我的main()源代码(这很简单,它将一个5个变量的数组发送到创建适当类型的类模板。我进行了一些研究,似乎遗漏了一些可能会因其他原因而导致崩溃的问题。析构函数的调用吗?我有些不知所措,这很可能是一个简单的修复方法。

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
浮动

-在print()方法中:

这是不安全的,因为在memory position处分配了内存ptr ... (ptr + size - 1),所以您可能会遇到分段错误。

-在constructor

您可以通过分配内存new,然后立即将指针重定向到指向与指向的位置相同的位置array这意味着您发生了内存泄漏。

-在destructor

如前所述,您的程序在destructor调用时会在此处崩溃,因为delete []不会在使用分配的内存上运行new,请参见constructor备注。

-在copy constructor

这里有两个问题。首先,您不能在ptr这里取消引用lhs- ,因为没有为他分配内存。此外,如果分配了内存ptr,则该语句*ptr = *obj.ptr;将仅将obj.ptr(如果在此位置也分配了内存)第一个元素ptr复制到的第一个元素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档