2017-01-31 19 views
-3

このコードは、main.cppとmatrice.cppという2つのファイルで構成されています。Matrix C++の値を出力

私の問題は、マトリックスが私が示す場所に値を書き込んでいないことです。私は、あなたが主対角線すべて1:A [i] [i] = 1;結果は異なります。

エラーは何ですか? なぜ行列の値を出力すると、6.86636e-44と表示されますか?

main.cppに:

#include <iostream> 
#include <stdio.h> 
#include "matrice.h" 
#include "stampaMatrice.h" 


using namespace std; 
#define N 10 
#define Inizio 0.00 
#define Fine 1.00 

float dy=(Fine-Inizio)/N; 

int main() 
{ 
    float ** A = matrice(dy, N); 
    stampaMatrice(&A[0][0],N,N); 

    //Clean up array 
    for (int i = 0; i < N; i++) 
      { delete [] A[i]; } 
    delete [] A; 
    A = 0; 

    return 0; 
} 

matrice.cpp:

#include <stdlib.h> 
#include <stdio.h> 
#include <iostream> 
using namespace std; 

float** matrice(float dy, int N){ 

float** A=0; 
A= new float*[N]; 
for(int i=0; i<N; i++){ 
A[i]=new float[N]; 
} 

//Assegnazione valori 
for(int i=0; i<N; i++){ 
//A[i][i+1]=1; 
//A[i][i-1]=1/dy; 
A[i][i]=1; 

} 


return A; 
} 

結果:

Result

+1

問題を再現するのに十分なコードがありますか?出力コードがありません。 –

+0

@DavidSchwartz StackOverflowにエラー/問題を投稿する方法ではありませんが、出力へのリンクがあります(質問の下部にある「結果」を参照)。 OPには、エラーメッセージを直接投稿するか、外部リンクを必要とせずにこのサイトに直接アクセスしてください。 – vsoftco

答えて

3

結果が誤っています。あなたが設定したのと同じように、メイン対角線のすべての値は1です。よく見てください。

メイン対角線の値を特定の値に設定していませんでした。したがって、特定の値を期待する必要はありません。あなたはそこにどんな迷惑があってもそれを得るでしょう。ただ

A[i]=new float[N](); 

A[i]=new float[N]; 

を変更する今、あなたは、コードのわずか20行のC++のすべての癖を持っている:

+0

さて、その出力は私にとってうんざりしています(正しい位置にある唯一の1が最初です)。おそらく、それらの数字がどのように表示されるかを見るために 'stampaMatrice()'を見ると、他のバグが明らかになるかもしれません。 –

+0

@Bob__ええ、それは 'N = 12'であり、おそらくOPは' \ n'を使わなかったので、全体がシフトされているからです。 – vsoftco

2

あなたがゼロに非対角要素を設定する必要があります。 C++ は明示的にそうしないとゼロ初期化を実行しません。

BTW、float** A=0;は、行列の要素を0に設定しません。。あなたはおそらくそれらのメモリアドレスで嘘をついたものなので、多くのゼロを取得します。

0

が、これは簡単で、 "修正"。