dart VM 是否对本机扩展的堆栈内存大小施加限制?

Does the dart VM impose restrictions on the stack memory size of a native extension?

我正在学习编写本机扩展,我发现了一个奇怪的事件。当我分配一个多维数组并像这样访问它时:(请原谅我可能使用的任何混乱的 C 代码和不良做法,除非它们可能是我错误的原因。我的 C 不是那么好)

int table[rows][cols]; //rows and cols are both > 1
memset(table, 0, sizeof(int) * rows * cols);

如果我做类似

的事情,我会遇到分段错误
table[rows-1][cols-1];

但是如果我像这样分配 table:

table = (int**)malloc(XLEN * sizeof(int *));
if (table == NULL) {
  ... error ...
}

for (i=0; i < XLEN; i++) {
  table[i] = (int*)malloc(YLEN * sizeof(int));
  if (table[i] == NULL) {
    ... error ...
  }
  memset(table[i], 0, sizeof(int) * YLEN);
}

然后一切正常。为什么会这样?

也许问题在于第一种情况你在堆栈上分配了一个数组?
如果您将在函数外使用对该数组的引用(在函数 returns 之后),您将始终遇到分段错误。

请举例说明你数组的使用,你会得到更多有用的建议。