C ++指针问题

时间:2017-11-24 01:47:58

标签: c++ pointers matrix

试图用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;
}

我不知道为什么会发生这种奇怪的输出,但看起来这些值得到了正确的保存。任何想法如何解决这个问题?

1 个答案:

答案 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);