我注意到在Xcode中用C编程有些麻烦。 如果我尝试使用下面定义的维度分配这三个数组:
#define MAX_NUM_VALID 12000
#define ALT_MAX 200000
{
...
double l_adYMLinkedData[MAX_NUM_STAR_VALID + ALT_MAX][1];
double l_adZMLinkedData[MAX_NUM_STAR_VALID + ALT_MAX][1];
double l_adMLinkedData[MAX_NUM_STAR_VALID + ALT_MAX][1];
...
}
Xcode在运行时返回错误说明:
EXC_BAD_ACCESS (code=2, address:.....)
我无法弄清楚为什么。如果我限制这些尺寸(即100和100),一切都很顺利。
有什么想法吗?
答案 0 :(得分:0)
尝试放入堆栈(这往往是一个相对有限的资源)是非常多的东西。
您可能想尝试进行动态分配,例如使用malloc
:
double *l_adYMLinkedData = malloc ((MAX_NUM_STAR_VALID+ALT_MAX)*sizeof(double));
// check and use it
free (l_adYMLinkedData);
这实际上给了你同样的东西。与sizeof
之类的指针/数组差异有微妙的区别,但如果您所做的只是索引,它们通常不会发挥作用。
答案 1 :(得分:0)
堆栈空间通常是有限的(在Visual Studio的情况下默认为4 MB)。每个数组占用近1.6 MB,并且当它试图进一步分配时,堆栈的空间不足。
在堆上分配它们,然后释放它们以避免内存泄漏。