我编写了这个由两个文件组成的代码:main.cpp和matrice.cpp。
我的问题是:矩阵不会写出我指示的值。我希望你在主对角线上写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;
}
结果:
答案 0 :(得分:3)
您误读了结果。主对角线上的所有值都是1,就像设置它们一样。仔细看。
您没有将主对角线的值设置为任何特定值。因此,您没有理由期望任何特定的价值观。你会得到任何垃圾。
答案 1 :(得分:2)
您必须将非对角线元素设置为零。如果您没有明确说明,C ++ 不会执行零初始化。
BTW,float** A=0;
不会将矩阵的元素设置为零。你碰巧得到了很多零,因为这可能是那些内存地址的谎言。
答案 2 :(得分:0)
&#34;定影&#34;这很简单:只需更改
A[i]=new float[N];
到
A[i]=new float[N]();
现在,您只需要20行代码即可拥有C ++的所有怪癖。