0

我注意到在 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),一切都会好起来的。

任何想法?

4

2 回答 2

0

试图放在堆栈上的东西太多了(这往往是一个相对有限的资源)。

您可能想尝试进行动态分配,例如malloc

double *l_adYMLinkedData = malloc ((MAX_NUM_STAR_VALID+ALT_MAX)*sizeof(double));
// check and use it
free (l_adYMLinkedData);

这有效地给了你同样的东西。指针/数组差异有一些细微的差异,sizeof但如果您所做的只是索引,它们通常不会发挥作用。

于 2013-09-03T13:37:22.087 回答
0

堆栈空间通常是有限的(在 Visual Studio 的情况下默认为 4 MB)。每个数组占用近 1.6 MB,堆栈在尝试进一步分配时空间不足。

而是将它们分配到堆上并稍后释放它们以避免内存泄漏。

于 2013-09-03T13:38:34.337 回答