【问题标题】:Printing 2d sections in 3d arrays in C ( segmentation fault )在 C 中打印 3d 数组中的 2d 部分(分段错误)
【发布时间】:2020-02-04 19:10:27
【问题描述】:

嘿,我正在做一个程序,它读取与 3D 数组的维度相对应的三个整数值(按行、列、深度的顺序),并且应该为这个 3D 数组动态分配内存。然后最后打印与“XOY 轴”平行的 3D 阵列的 2D 截面。我得到Segmentation fault (core dumped) 在打印部分 // 到 XOY 轴

#include <stdio.h>
#include <stdlib.h>

void read_matrices(int dim1, int dim2, int dim3, int ***A);
void XOY(int dim1, int dim2, int dim3, int ***A);



int main(int argc, char const *argv[])
{
    /* code */

    int dim1, dim2, dim3;
    scanf("%d%d%d", &dim1, &dim2, &dim3);
    int i,j;
    int *** array = (int ***)malloc(dim1*sizeof(int**));

        for (i = 0; i< dim1; i++) {

        array[i] = (int **) malloc(dim2*sizeof(int *));

            for (j = 0; j < dim2; j++) {

              array[i][j] = (int *)malloc(dim3*sizeof(int));
            }

        }



    read_matrices(dim1,dim2,dim3, array);  
    XOY(dim1,dim2,dim3, array); 
    return 0;
}

void read_matrices(int dim1, int dim2, int dim3, int ***A)
{
  //getting input of the arrays A & B

  int a,b,c;
  for (a = 0; a < dim1; ++a)
  {
    for (b = 0; b < dim2; ++b)
    {
        for (c = 0; c < dim3; ++c)
        {
          scanf("%d", &A[a][b][c]);

        }
    }
  }

}

void XOY(int dim1, int dim2, int dim3, int ***A)
{

printf("Section 1:\n");
    for (int i = 0; i < dim1; ++i)
    {
        for (int i = 0; i < dim2; ++i)
        {
            printf("%d ", A[i][i][0]);
        }
        printf("\n");
    }



printf("Section 2:\n");
    for (int i = 0; i < dim2; ++i)
    {
        for (int i = 0; i < dim3; ++i)
        {
            /* code */
            printf("%d ", A[0][i][i] );

        }
        printf("\n");
    }

printf("Section 3:\n");
    for (int i = 0; i < dim1; ++i)
    {
        for (int i = 0; i < dim3; ++i)
        {
            /* code */
            printf("%d ", A[i][0][i] );

        }
        printf("\n");
    }


}

【问题讨论】:

标签: c arrays multidimensional-array segmentation-fault dynamic-memory-allocation


【解决方案1】:

编译时出现警告:

for (int i = 0; i < dim1; ++i)
{
    for (int i = 0; i < dim2; ++i)

警告:阴影声明在这里 [-Wshadow] for (int i = 0; i

在第二个循环中将 i 更改为其他内容(即:j

【讨论】:

    猜你喜欢
    • 2012-09-09
    • 2021-06-27
    • 2013-11-10
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多