Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中通过引用传递的三维数组_C_Arrays_Reference_3d - Fatal编程技术网

C语言中通过引用传递的三维数组

C语言中通过引用传递的三维数组,c,arrays,reference,3d,C,Arrays,Reference,3d,我正在处理一些非常大的图像立方体,它们在维度上是x*y*z 目前我一直在和他们打交道 int ***input = malloc(sizeof(int **)*(lines)); int d; int i; for(i = 0 ; i<lines ; i++) { input[i] = malloc(sizeof(int *)*bands); for(d = 0 ; d<bands ; d++) { *input[i][d] = malloc(siz

我正在处理一些非常大的图像立方体,它们在维度上是
x*y*z

目前我一直在和他们打交道

int ***input = malloc(sizeof(int **)*(lines));
int d;
int i;
for(i = 0 ; i<lines ; i++) {
    input[i] = malloc(sizeof(int *)*bands);

    for(d = 0 ; d<bands ; d++) {
        *input[i][d] = malloc(sizeof(int)*(samples));
    }
}
但是,在进入(I..)的第一个
循环后,我似乎收到seg故障。

任何建议都会很有帮助,谢谢。

如果输入是指向3D向量的指针,这很好:

/* original */
input[i] = malloc(sizeof(int *)*bands);
当输入变成int
**
:指向向量指针的指针时,此更改不正确:

/* original */
*input[i] = malloc(sizeof(int *)*bands);
你想要:

/* original */
(*input)[i] = malloc(sizeof(int *)*bands);
在C语言中,
*x[y]
表示
*(x[y])

更简单的方法是使用局部变量:

void function(int ****pinput)
{
  int ***input = malloc(/* ... */);
  /*...code stays the same as before...*/
  *pinput = input; /* place it in the location specified by caller */
}
另外,让我们对原作做一些风格上的调整。(忽略缺少malloc故障检查):

int***input=malloc(行*sizeof*input);
int d;
int i;

对于(i=0;i当输入是指向3D向量的指针时,这是正常的:

/* original */
input[i] = malloc(sizeof(int *)*bands);
当输入变成int
**
:指向向量指针的指针时,此更改不正确:

/* original */
*input[i] = malloc(sizeof(int *)*bands);
你想要:

/* original */
(*input)[i] = malloc(sizeof(int *)*bands);
在C语言中,
*x[y]
表示
*(x[y])

更简单的方法是使用局部变量:

void function(int ****pinput)
{
  int ***input = malloc(/* ... */);
  /*...code stays the same as before...*/
  *pinput = input; /* place it in the location specified by caller */
}
另外,让我们对原作做一些风格上的调整(忽略malloc失败检查的缺失):

int***input=malloc(行*sizeof*input);
int d;
int i;

对于(i=0;不存在“通过引用传递”在C语言中,你总是按值传递。在这种情况下,你的值是一个指针。可能是语义,但可能会帮助你更好地理解你在做什么……还有,你考虑过
typedef
s吗?啊,为了某人的缘故,检查
malloc
失败!@Mankarse lol,我知道这看起来很可笑,但这不是正确的语法吗x?@littleadv我对typedef不太熟悉。我认为这将在语法上删除
***
符号?它不仅简化了符号,还将帮助您了解在任何给定时间使用的指针,并允许您使用正确类型的临时变量,而不是通用的
*int
ywhere。这样严格的编译器会在不匹配时警告您。我认为typedef不一定会有多大帮助。这是一个3D数组,将其隐藏在typedef后面只会增加混乱并掩盖正在发生的事情。另一方面,我建议更改如下表达式:
int***input=malloc(sizeof(int**)*(line));
对此:
int***input=malloc(lines*sizeof*input);
没有“按引用传递”在C语言中,你总是按值传递。在这种情况下,你的值是一个指针。可能是语义,但可能会帮助你更好地理解你在做什么……还有,你考虑过
typedef
s吗?啊,为了某人的缘故,检查
malloc
失败!@Mankarse lol,我知道这看起来很可笑,但这不是正确的语法吗x?@littleadv我对typedef不太熟悉。我认为这将在语法上删除
***
符号?它不仅简化了符号,还将帮助您了解在任何给定时间使用的指针,并允许您使用正确类型的临时变量,而不是通用的
*int
ywhere。这样严格的编译器会在不匹配时警告您。我认为typedef不一定会有多大帮助。这是一个3D数组,将其隐藏在typedef后面只会增加混乱并掩盖正在发生的事情。另一方面,我建议更改如下表达式:
int***input=malloc(sizeof(int**)*(line));
到此:
int***input=malloc(lines*sizeof*input)
+1.索引优先于取消引用。或者,更一般地说,后缀运算符的优先级高于一元运算符。非常感谢,当我可以回到工作代码时,我将对此进行测试。干杯。我在一些原始代码中添加了反勾号,其中*被误解为标记。对不起!+1.索引优先于取消引用。或者,更一般地说,是后缀运算符运算符的优先级高于一元数。非常感谢,当我可以重新开始工作代码时,我将对此进行测试。干杯。我在一些原始代码中添加了反勾号,其中*被误解为标记。对不起!