试图用c ++创建一个对角矩阵,但得到以下输出:`
Enter Arraysize.5
5
Array sized [5,1987668707] created.
Array contents:
1 0 0 0 0 0 0 0 1150447976 134271638 0 3 0 0 0 0 0 0 1150447976 134271638 0 0 4 0 0 0 0 0 1150447976 134271638 0 0
0 3 0 0 0 0 0 0 1150447976 134271638 0 0 4 0 0 0 0 0 1150447976 134271638 0 0 0 6 0 0 0 0 1150447976 134271638 0 0
0 0 4 0 0 0 0 0 1150447976 134271638 0 0 0 6 0 0 0 0 1150447976 134271638 0 0 0 0 2 0 0 0 1150447976 134271638 0 0
0 0 0 6 0 0 0 0 1150447976 134271638 0 0 0 0 2 0 0 0 1150447976 134271638 0 0 0 0 0 5 0 0 1150447976 134271638 0 0
0 0 0 0 2 0 0 0 1150447976 134271638 0 0 0 0 0 5 0 0 1150447976 134271638 0 0 0 0 0 0 8 0 1150447976 134271638 0 0
0 0 0 0 0 5 0 0 1150447976 134271638 0 0 0 0 0 0 8 0 1150447976 134271638 0 0 0 0 0 0 0 3 1033072912 53910 7505208 74766
40
0 0 0 0 0 0 8 0 1150447976 134271638 0 0 0 0 0 0 0 3 1033072912 53910 7505208 7476640 35652354 50397954 34603592 3460353
6 34603536 34603536 34603536 34603794 36700688 34603536
0 0 0 0 0 0 0 3 1033072912 53910 7505208 7476640 35652354 50397954 34603592 34603536 34603536 34603536 34603536 34603794
36700688 34603536 34603536 34865684 51511824 34603536 34865680 34603794 34603536 34603536 50397953 50397953
` 问题发生在matrix_diagonal函数中......但我不确切知道在哪里。 我目前的代码:
#include <iostream>
int** matrix_diagonal(int size, int vals[]){
int** array = 0;
array = new int*[size];
for(int i = 0;i<size;i++){
array[i] = new int[size];
for(int k = 0; k<size;k++){
array[i][k]= i == k ? vals[i] : 0;
}
}
return array;
}
int main() {
int size = 0;
printf("Geben Sie eine matrixgröße an.");
std::cin>>size;
int sizeDia[]={1,3,4,6,2,5,8,3};
int** matrixdia = matrix_diagonal(8,sizeDia);
for (int h = 0; h < sizeof(sizeDia); h++)
{
for (int w = 0; w < sizeof(sizeDia); w++)
{
printf("%i ", matrixdia[h][w]);
}
printf("\n");
}
printf("\n");
for (int h = 0; h < sizeof(sizeDia); h++)
{
delete [] matrixdia[h];
}
matrixdia = 0;
return 0;
}
我不知道为什么会发生这种奇怪的输出,但看起来这些值得到了正确的保存。任何想法如何解决这个问题?
答案 0 :(得分:0)
此链接详细解释了char和on int上的sizeof运算符。
http://www.cplusplus.com/faq/sequences/arrays/sizeof-array/
更特别的是,我建议你阅读这部分内容:
基础知识
首先,
sizeof()
运算符没有给你 数组中元素的数量,它给出了字节数a 东西占据了记忆。因此:#include <stdio.h> int main() { char s[] = { 1, 2, 3, 4, 5, 0 }; int xs[] = { 1, 2, 3, 4, 5, 0 }; printf( "sizeof( s ) = %d\n", sizeof( s ) ); printf( "sizeof( xs ) = %d\n", sizeof( xs ) ); return 0; }
<强>结果:强>
sizeof( s ) = 6 sizeof( xs ) = 24
这引起了一些混乱,因为许多初学者第一次尝试 使用sizeof()通常使用字符串,并且始终使用char 一个字节长。然而,int将是不同的东西。 (该 实际大小取决于您的计算机。在我的情况下,int是四个字节 long,六个四字节元素总共24个字节。)
因此,您应该将int数组的大小除以体系结构中int的大小,以了解数组的大小。
sizeof(sizeDia) / sizeof(int);