qq_34982491 于 2016.09.18 21:38 提问

c++中析构函数出现问题

#pragma once
#include
using namespace std;
struct term
{
double coef;//{数} coefficient 系数
int expn;//exponent 指数

};
struct PNode
{
term data;
PNode *next;
};
class Polyn //polynomial 多项式
{
public:
Polyn()
{
cout << "构造函数调用"< phead = new PNode;
}
~Polyn() { cout << "析构函数调用"<<endl; clear(); delete phead; }//野指针？？？？存在-出错
void clear(); //清空
void creatp();//建立链表

void print();//输出
private:

};

void Polyn::clear()
{
PNode *p, *q;
while (p)
{

``````    q = p->next;
delete p;
p = q;

}
``````

}
void Polyn::creatp()
{
int n;
int i = 0;
cout << "请输入多项式项数：";
cin >> n;
PNode *p, *q;
for (i = 0; i < n; i++)
{
p = new PNode;
//cout << "输入系数：" << endl;
cin >> p->data.coef;
//cout << "输入指数："< cin >> p->data.expn;
p->next = NULL;
q->next = p;
q = p;
}
}
{
Polyn pc;
PNode *p1, *p2, *p3;
PNode *t1, *t2, *t3;
t1 = p1->next;
t2 = p2->next;
t3 = p3;
while (t1&&t2)
{
if (t1->data.expn < t2->data.expn)
{
t3->next = new PNode;
t3 = t3->next;
t3->data = t1->data;
t1 = t1->next;
}
else if (t1->data.expn > t2->data.expn)
{
t3->next = new PNode;
t3 = t3->next;
t3->data = t2->data;
t2 = t2->next;
}
else
{
double a = t1->data.coef + t2->data.coef;
if (a != 0.0)
{
t3->next = new PNode;
t3 = t3->next;
t3->data.coef = a;
t3->data.expn = t1->data.expn;
}
t1 = t1->next;
t2 = t2->next;
}
}
while (t1 != NULL)
{
t3->next = new PNode;
t3 = t3->next;
t3->data = t1->data;
t1 = t1->next;
}
while (t2 != NULL)
{
t3->next = new PNode;
t3 = t3->next;
t3->data = t2->data;
t2 = t2->next;
}
t3->next = NULL;
return pc;
}

void Polyn::print()
{
PNode *p;
cout << "empty!!" << endl;
else
while (p)
{
cout << p->data.coef << " " << p->data.expn << " ";
p = p->next;
}
cout << endl;
}

ｍａｉｎ．ｃｐｐ
#include
#include"polynomial.h"
using namespace std;
int main()
{
Polyn s,s2;
cout << "输入多项式1：" << endl;
s.creatp();
cout << "输入多项式2：" << endl;
s2.creatp();
s2.print();

``````cout << "相加为：" << endl; s.PolyAdd(s2).print();
//s3.print();
/*s3.clear();//error 出错，完全相同可运行
s2.clear();
s.clear();
/*s.creatp();
s.print();*/
``````

}
//realloc

1个回答

devmiao      2016.09.19 00:13

【C/C++】构造函数和析构函数

C语言的构造函数与析构函数
__attribute__((constructor))  与 __attribute__((destructor)) #include void _init(void)__attribute__((constructor)); void _fini(void)__attribute__((destructor)); void _init(void) { printf("c

#include #include #include using namespace std; class A { private: char *name; public: A(char *n) { name=new char[strlen(n)+1]; strcpy(name,n); cout<<name<<endl; }; A(const A &a){ cout<
C++:类的构造函数和析构函数
C++:类的构造函数和析构函数标签（空格分隔）： c++ 作者：陈小默C类的构造函数和析构函数 构造函数 声明和定义 引用参数与构造函数 使用构造函数定义对象 默认构造函数 析构函数 声明和定义 析构函数的执行时机 const成员函数 实例演示 开发环境：Visual Studio 2010 构造函数当我们需要在对象创建时初始化一些数据的时候，我们不可能提供一个普通的成员方法供程序猿在对象创建后调

c++构造函数和析构函数的区别？

C++类的构造函数与析构函数
C++中每个类都有其构造与析构函数，它们负责对象的创建和对象的清理和回收，即使我们不写这两个，编译器也会默认为我们提供这些构造函数。下面仍然是通过反汇编的方式来说明C++中构造和析构函数是如何工作的。编译器是否真的会默认提供构造与析构函数在一般讲解C++的书籍中都会提及到当我们不为类提供任何构造与析构函数时编译器会默认提供这样六种成员函数：不带参构造，拷贝构造，“=”的重载函数，析构函数，以及带co
Objective－C学习笔记－－－构造函数和析构函数

c++析构函数的调用
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; class haitao{ private: int ageee; public : int getAgee(){ return ageee; } h
c语言中构造函数和析构函数抛出异常
C++中构造函数和析构函数可以抛出异常吗? 都不行 都可以 只有构造函数可以 只有析构函数可以 答案是C          1.不建议在构造函数中抛出异常；        2.构造函数抛出异常时，析构函数将不会被执行,需要手动的去释放内存         1.析构函数不应该抛出异常；        2.当析构函数中会有一些可能发