【发布时间】:2013-12-14 23:42:47
【问题描述】:
我正在尝试编写一个包含双 * 数组的类,该数组可以通过各种方式填充,在程序结束时,应该释放内存 - 唉,这不起作用。
我收到“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 -
你不能
delete内存不是从new分配的 -
这显然不是主要问题,但不要忘记定义一个复制 c`tor。
-
What is The Rule of Three? 的可能重复项
标签: c++ destructor memory-management