为什么变量不存储值?

Why a variable is not storing the value?

在这道题中,有一个大小为 200 x 200 x 320 的立方体 现在我想为格子节点中所有 0 和 1 的点分配一个变量“isn”。 x 方向 85-115、y 方向 85-115 和 z 方向 240-270 的点阵节点的“isn”参数值分配为 1,其余节点分配为 0。 分配后,当我尝试打印节点 (100,100,255) 的“isn”值时,结果应该为 1。但它给出的是 0。

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

const int nx=200, ny=200, nz=320;

int getindex1(int i, int j, int k)
{
    int c = (i*(ny+2)+j)*(nx+2)+k;
    return c;
}

int main()
{
    int i, j, k, ia, ja, ka;
    int *isn;

    //******Dynamic Memory Allocation
    isn = (int*) malloc (((nx+2)*(ny+2)*(nz+2)) * sizeof(int));

    for(i=0;i<=nx+1;i++)
    {
     for(j=0;j<=ny+1;j++)
         { 
           for(k=0;k<=nz+1;k++)
           {
            isn[getindex1(i,j,k)]=0;    
           }    
        }   
    }

    for(i=0;i<=nx+1;i++){
            for(j=0;j<=ny+1;j++){
                for(k=0;k<=nz+1;k++){
                    isn[getindex1(i,j,k)]=0;
                    if(i>=85 && i<=115 && j>=85 && j<=115 && k>=240 && k<=270)
                    {
                        isn[getindex1(i,j,k)]=1;
                        printf("getindex1(%d,%d,%d)=%d\tisn=%d\n",i,j,k,getindex1(i,j,k),isn[getindex1(i,j,k)]);
                    }   
                    
                    if(i==100 && j==100 && k==255)
                    {
                        printf("\n\ngetindex1(100,100,255)=%d\tisn=%d\n\n",getindex1(100,100,255),isn[getindex1(100,100,255)]);
                    }       
                }
            }
        } 


printf("\n\ngetindex1(100,100,255)=%d\tisn=%d\n\n",getindex1(100,100,255),isn[getindex1(100,100,255)]);
        
    return 0;
}

你搞错维度了,指标计算应该是

(i * (ny + 2) + j) * (nz + 2) + k

如果你引入代表张量维度的变量,你的逻辑将更容易管理,如下所示:

int isnLayers, isnRows, isnCols;

isnLayers = nx + 2;
isnRows = ny + 2;
isnCols = nz + 2;

isn = malloc(sizeof (*isn) * isnLayers * isnRows * isnCols);

for (i = 0; i < isnLayers; i++) {
    for (j = 0; j <  isnRows; j++) {
        for (k = 0; k < isnCols; k++) {
            ...
        }
    }
}