Mel*_*uha 3 c arrays multidimensional-array
可能重复:
C编程,为什么这个大型数组声明会产生分段错误?
我正在用c语言阅读图像,但我无法这样做,因为我的程序在两者之间停止...在调试之后我发现它是由于数组大小...对数组的最大大小有任何限制吗?如果我声明大小为1400X1400的数组一切正常但如果我定义大小为1600X1400的数组我的程序停止工作......为什么它是这样...编译器或操作系统对数组大小有任何限制?如果是这样,c的解决方案是什么.
unsigned char idata[1400][1400]; //working fine
unsigned char idata[1600][1400]; //not working
Run Code Online (Sandbox Code Playgroud)
我猜这idata
是一个局部变量.问题是局部变量存储在堆栈上(技术上是"自动存储"),并且堆栈远小于您尝试在其上分配的6400兆字节.在其上分配大量存储会导致堆栈溢出.
尝试
unsigned char** idata = new unsigned char*[DIM1];
for (int i = 0; i < DIM1; ++i)
idata[i] = new unsigned char[DIM2];
// or
unsigned char (*idata)[DIM2] = new char[DIM1][DIM2];
Run Code Online (Sandbox Code Playgroud)
要在免费商店中分配它,你应该没有问题.
编辑:
我只是看了标签,并没有看到你只是在谈论C.如果是这样,你可以做同样的事情,但使用malloc
而不是new
:
unsigned char** idata = malloc(sizeof(unsigned char*) * DIM1);
for (i = 0; i < DIM1; ++i)
idata[i] = malloc(DIM2);
// or
unsigned char (*idata)[DIM2] = malloc(DIM1 * DIM2);
Run Code Online (Sandbox Code Playgroud)
并且不要忘记free
(或者delete[]
对于C++)您分配的内存以避免内存泄漏.
归档时间: |
|
查看次数: |
10307 次 |
最近记录: |