我想写一个类,其中包含一个双*数组,可以通过各种方式填充,在程序结束时,内存应该释放 - 唉,这是行不通的。C++析构函数解除分配问题
我得到了“programname.exe引发了一个断点”的通知,这导致我的main.cpp的最后一行 - 当我删除我的析构函数时它工作正常,所以我假设它必须用那个做点什么。
下面是相关代码:
.H
#pragma once
using namespace std;
#include <iostream>
class polynom
{
public:
polynom(int grad, double* arr);
polynom(int grad);
polynom();
~polynom(void);
polynom& operator=(polynom p);
friend ostream& operator<<(ostream& os, const polynom& p);
private:
int grad;
double* arr;
};
的.cpp
polynom::polynom(int grad, double* arr)
{
this->grad = grad;
this->arr = arr;
}
polynom::polynom(int grad)
{
this->grad = grad;
this->arr = new double[grad];
}
polynom::polynom()
{
arr = NULL;
}
polynom::~polynom()
{
delete[] arr;
}
主要
void main()
{
double arr1[] = {5,0,1};
double arr2[] = {3,2,1};
polynom p1 = polynom(2, arr1);
polynom p2 = polynom(2, arr2);
system("pause");
}
非常感谢!
您试图删除堆栈分配的数组,这会使应用程序正常崩溃。你可能想避免使用原始指针,而是看看'td :: shared_ptr'和'std :: unique_ptr' – bobah
你不能'删除'没有从'new'分配的内存 –
这显然不是主要问题,但不要忘记定义一个副本。 – MaMazav