gpt4 book ai didi

c - 分配给 3D 矩阵的可用内存

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:54 26 4
gpt4 key购买 nike

我通过以下代码为 3D 矩阵分配内存。

double ***AllocMatrix3(short nrh, short nch, short nph)
{
short i,j,k;
double ***m;

m=(double ***) malloc(nrh* sizeof(double***));

for(i=0;i<=nrh;i++) {
m[i]=(double **) malloc(nch*sizeof(double*));
for (j=0;j<=nch;j++){
m[i][j]=(double*) malloc(nph*sizeof(double));
}
}
for(k=0;k<=nph;k++)
for(i=0;i<=nrh;i++)
for(j=0;j<=nch;j++)
m[i][j][k] = 0.0;
return m;
}

但是当我尝试使用下面的代码释放内存时它不起作用

void FreeMatrix3(double ***m,short nrl,short nrh,
short ncl,short nch, short npl,short nph)
{
short i,j,k;

for(i=nrh;i>=0;i--)
for(j=nch;j>=0;j--)
free((m[i][j]));
free(m[i]);
}

你能帮忙吗?提前致谢。维吉塔

最佳答案

而不是使用 malloc然后将值设置为 0你可以使用 calloc用于最终分配(在 double 级别)。

m=(double ***) malloc(nrh* sizeof(double***));将为nrh分配房间元素,但您稍后会使用 for(i=0;i<=nrh;i++) 进行迭代迭代 nrh + 1次。您需要将调用更改为 mallocfor .

对于 free ,您需要:

  • free m[i][j]对于所有 i 和 j
  • free m[i]对于所有我
  • free m

基本上,您应该始终为您的 for 添加荣誉声明。它有助于防止此类问题。

还有,你真的需要锯齿状数组并返回double***吗? ?你可以通过返回 calloc( nrh * nch * nph, sizeof(double) ) 来做同样的事情。然后您可以通过一次调用 free 免费使用它.

注意,关于 calloc 的部分可能并不总是适用于浮点值。不过,它应该始终适用于整数类型。

关于c - 分配给 3D 矩阵的可用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17251904/

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