我在将大数组传递给 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/