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

时间:2015-06-14 04:49:58

标签: c memory dart dart-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 = (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);
}

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

1 个答案:

答案 0 :(得分:1)

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

请举一个使用数组的小例子,你会得到更多有用的建议。