c - 将大的多维数组传递给 C 中的函数

标签 c function multidimensional-array segmentation-fault argument-passing

我在将大数组传递给 C 中的函数时遇到问题。

我声明:

int image[height][width][3]={};

高度和宽度可以达到 1500。当我调用时:

foo((void *)image,height,width);

声明如下:

int *foo(const int *inputImage, int h, int w);

我收到段错误。奇怪的是,如果我的值(value)观是:

height=1200;
width=290;

没有问题,但是当他们:

height=1200;
width=291;

我得到了提到的错误。每个整数 4 个字节,高度和宽度均为 1500(绝对最坏的情况),数组大小为 27MB,imo 不是那么大,应该无关紧要,因为我只是将指针传递给第一个元素阵列。有什么建议吗?

最佳答案

在 27 MB 时,您的数组可能比堆栈大,堆栈通常为 1 MB。一旦 foo 开始处理数据,您就会破坏您的流程。改为在堆上分配数组:

typedef int (*image_buf)[height][width][3];
image_buf image = malloc(sizeof(image_buf));
...

关于c - 将大的多维数组传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925536/

相关文章:

c - fopen 改变 C 中的变量值

c++ - 静态全局变量的地址改变了吗?

C:在文件中使用 CR

在 C 中清除标准输出?

java - 为什么 eval 类给我一个从 int 到 double 的转换错误?

javascript - 传递一个向 $.when .done 发出 ajax 请求的函数

R - 如何结束功能并返回 NA?

c++ - 如何在 C++ 中选择多维数组中的范围?

javascript - 创建一个多维数组并填充它

arrays - 如何折叠一组特定维度的数组?