所以我一直試圖解決這個問題幾個小時但沒有任何成功。我有一個多項式方法(set/get grade,set/get polynom的係數,打印多項式,針對給定數字集合查找每個y = f(x)等)。多項式類在調試器中運行良好,但在嘗試生成並運行時沒有運行
但是,問題是隻要多項式的等級是偶數,構建&運行就會返回奇怪的值。它的調試運行非常好。另一方面,只要檔次不均勻,對於調試和構建&運行都可以很好地工作。我在想這個問題是在分配內存的地方。這是代碼。由於
的main.cpp
#include "poly_header.h"
int main()
{
Poly p;
p.AfisareValori();
return 0;
}
poly_header.h
#include <iostream>
#include <math.h>
using namespace std;
class Poly
{
private:
int grad;
int* coeficienti;
int a;
int b;
int dx;
public:
Poly();
void SetGrad();
int GetGrad();
void SetCoef();
void GetCoef();
void SetPolyn();
void PrintPoly();
void SetInterval();
void SetDistanta();
void AfisareValori();
~Poly();
};
poly_functions.cpp
#include "poly_header.h"
Poly::Poly()
{
this->grad = 0;
this->coeficienti = new int[0];
}
Poly::~Poly()
{
delete coeficienti;
}
void Poly::SetGrad()
{
int n;
cout<<"Introduceti gradul dorit al polinomului: ";
cin>>n;
this->grad = n;
}
int Poly::GetGrad()
{
cout<<"\n";
return this->grad;
}
void Poly::SetCoef()
{
int n;
this->coeficienti = new int[this->grad];
for(int i = 0; i <= this->grad; i++){
cout<<"Introduceti coeficientul "<<i<<" :";
cin>>this->coeficienti[i];
cout<<"\n";
}
}
void Poly::GetCoef()
{
cout<<"\n";
for(int i = 0; i <= this->grad; i++)
cout<<"Coeficientul asociat termenului x^"<<i<<" este:"<<this->coeficienti[i]<<"\n";
}
void Poly::SetPolyn()
{
SetGrad();
SetCoef();
}
void Poly::PrintPoly()
{
SetPolyn();
for(int i = grad; i >= 0; i--){
if(i == 0){
cout<<coeficienti[i];
break;
}
cout<<coeficienti[i]<<"*X^"<<i<<" + ";
}
}
void Poly::SetInterval()
{
int a,b;
cout<<"Introduceti capatul din stanga al intervalului: ";
cin>>a;
this->a = a;
cout<<"\n";
cout<<"Introduceti capatul din dreapta al intervalului: ";
cin>>b;
this->b = b;
cout<<"\n";
}
void Poly::SetDistanta()
{
int dx;
cout<<"Introduceti distanta dintre puncte: ";
cin>>dx;
this->dx = dx;
cout<<"\n";
}
void Poly::AfisareValori()
{
SetPolyn();
SetInterval();
SetDistanta();
int suma;
for(int i = a; i <= b; i+=dx){
suma = 0;
for(int j = 0; j <= grad; j++){
suma += coeficienti[j] * (pow (i,j));
}
cout<<"Valorea polinomului in punctul "<<i<<" este "<<suma<<"\n";
}
}
即使沒有動態分配,你也會遇到類似的問題 - 'coeficienti'中最大的有效索引是'grad-1'。 – molbdnilo
它也適用於3,5,7。它的測試.. – Gusti
在上一個循環(帶有j <= grad'的循環)中,您正在訪問不存在的「coefficienti [grad]」,因爲您已分配通過'new int [this-> grad];'。這並不奇怪,這是崩潰的,令人驚訝的是,你聲稱它在某些情況下有效。你真的確定,你的測試沒問題嗎? – user463035818