gpt4 book ai didi

c - 访问二维晶格 C 中的元素

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:55 25 4
gpt4 key购买 nike

为什么我不能在不引发段错误的情况下使用 [ ][ ] 访问 Lattice?

int *LatticeHeight;
int **Lattice;

LatticeHeight = (int*)malloc(Height*sizeof(int));

Lattice = (int**)malloc(Length*sizeof(LatticeHeight));

for(i=0;i<Height; i++)
{
for(j=0; j<Length; j++)
{
Lattice[j][i] = 0;
}
}

我将其解释为;

我有指向一维高度数组的指针

然后我设置 Lattice 以便可以存储 Length-many 个 LatticeHeight 副本(制作网格)

然后我访问格子的每个元素并将其值设置为 0

此外,有人可以解释为什么这在 1D 中有效但在 2D 中无效,即

for(i=0;i<Height;i++)
{
LatticeHeight[i] = 0;
}

不会抛出段错误

最佳答案

您没有正确分配数组。您的第一个 malloc 分配一行;你的第二个 malloc 分配空间来存储指向每一行的指针,但它实际上并没有分配任何行去那里(它也没有与你之前分配的单行有任何关联)。

编写这段代码的最简单的方法,如果你不需要有不同长度的行,就是分配一个内存块:

int (*Lattice)[Length] = calloc( Height, sizeof *Lattice );

如果出于某种原因你确实想要一个锯齿状数组(即每一行都分配在一个单独的内存块中)那么代码是:

int **Lattice = malloc( Height * sizeof *Lattice );
for ( size_t row = 0; row != Height; ++row )
Lattice[row] = calloc( Length * sizeof **Lattice );

请注意,calloc 分配内存并将其归零,因此之后您不需要零循环,并且 don't cast malloc

关于c - 访问二维晶格 C 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27454864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com