2017-01-31 38 views
-3

我編寫了由兩個文件組成的代碼:main.cpp和matrice.cpp。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,就像您設置它們一樣。仔細觀察。

您沒有將主對角線上的值設置爲任何特定值。所以你沒有理由期待任何特定的價值。你會得到任何垃圾恰好在那裏。

+0

那麼,那個輸出看起來很糟糕(唯一一個在正確的位置是第一個)......也許看一下'stampaMatrice()'看看這些數字是如何打印的,可以揭示其他錯誤。 –

+0

@Bob__是的,那是因爲'N = 12',整個事情都發生了變化,因爲OP可能沒有使用任何'\ n'。 – vsoftco

2

你要非對角線元素設置爲零。 C++ 不會執行零初始化,如果你沒有明確地這樣說。

順便說一下,float** A=0;不會將矩陣的元素設置爲零。你碰巧得到很多零,因爲這可能是在這些內存地址上撒謊。

0

「修復」 這很簡單:只要改變

A[i]=new float[N]; 

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

現在,你必須在短短20行代碼的C++的怪癖。