gpt4 book ai didi

c++ - 程序在析构函数处崩溃

转载 作者:行者123 更新时间:2023-12-01 19:34:13 26 4
gpt4 key购买 nike

我似乎无法理解为什么我的程序运行成功然后在析构函数处崩溃。下面是我的 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() 方法中:

在内存位置 ptr ... (ptr + size - 1) 分配内存是不安全的,因此您可能会遇到段错误。

-在构造函数中:

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

-在析构函数中:

正如已经提到的,当调用析构函数时,你的程序会崩溃,因为delete[]不会对用new分配的内存进行操作,请参阅构造函数备注。

-在复制构造函数中:

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

关于c++ - 程序在析构函数处崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com