2017-03-29 2 views
0

一度機能を追加してmainメソッドで呼び出すと、クラッシュが開始されました。私はこのメソッドを追加する前にコードが正常に実行されていた。コードは多項式を実行して、その多項式の配列を使ってその導関数を求めます。コードのこのセクションを実行しようとするたびにC++がクラッシュする

#include <iostream> 
#include <cmath> 
#include <cstdlib> 
using namespace std; 

int readPolynomial (int maxOrder, double polynomial[]) { 
    int order,i; 
    cout<< "enter the order of the polynomial"; 
    cin>>order; 
    i=order; 
    while (i>-1){ 
     cout<<" enter a coeffecient for x^"<<i<<endl; 
     cin>>polynomial[i]; 
     --i; 
    } 
    return order; 
} 

void displayPolynomial (int order, double polynomial[]) { 
    for (int i = order; i>-1;i--){ 
     if (polynomial[i] > 0) { 
       cout << " +" << polynomial[i]<< "x^"<<i;  
     } 
     else { 
      cout << " - " << fabs(polynomial[i])<<"x^"<<i; 
     } 
    } 
} 
int differentiate (int order, double polynomial[], double derivative[]){ 
    int der; 
    der= order-1; 
    int i = der; 
    while (i>-1){ 
     derivative[i]=polynomial[order]*order; 
     order--; 
     i--; 
    } 
    return der; 
} 
int main() { 

    const int MAXN = 8; // maximum order (a constant) 
    double polynomial[MAXN + 1]; 
    int polynomialN; 
    double x,value; 
    double derivative[polynomialN-1]; 
    double derOrder; 

    polynomialN = readPolynomial (MAXN, polynomial); 
    cout << "\nThe polynomial (order = " << polynomialN << ") is\n"; 
    displayPolynomial (polynomialN, polynomial); 
    derOrder = differentiate (polynomialN, polynomial, derivative); 

    cout<< " the derivative of the polynomial is:"<<endl; 
    displayPolynomial (derOrder, derivative); 

    system("PAUSE"); return 0; 
} 
+2

デバッグ助けを求める質問は、(「**なぜこのコードは動作しない?**」)を再生するために、 特定の問題やエラー**と最短のコードに必要な を**望ましい行動を含める必要がありますそれは**質問自体にあります。 **明確な問題のない質問 ステートメント**は、他の読者には役に立ちません。参照:[最小、完全、および 検証可能な例の作成方法](http://stackoverflow.com/help/mcve)また、メモリチェックツール(AddressSanitizer、Valgrind)を試してみてください。 –

+1

二重微分[多項式N-1]; - Um。宣言に遭遇した*正確な点で 'polynomialN'とは何ですか?ヒント:後で 'polynomialN'の値を変更するだけで、配列は魔法のように展開されません。 – WhozCraig

+0

多項式Nを初期化する前に使用します。悪いことが起こります。 –

答えて

0

この文は間違っています。これはbeforeplynominalNを開始するためです。 正確な配列の長さが必要な場合は、C++でメモリを割り当てる必要があります。

double derivative[polynomialN-1]; 
関連する問題